因此,我有一个数据集,其中包含站点、年份和测量的变量(比方说x)。在一年中,跨多年,在多个地点多次测量X。这是我的数据集的一个例子(每个x都是在不同的日期收集的,我只是从日期中提取了年份,因为我对年度平均值感兴趣)。让我们将数据集命名为df:
>df
site year x
a 2000 10
a 2000 12
a 2000 13
b 2000 14
b 2000 15
b 2000 17
c 2000 9
c 2000 11
c 2000 11
a 2001 11
a 2001 12
a 2001 12
b 2001 13
...而且这种情况持续了好几年。
我想要提取每个特定站点和年份的x的平均值。我写了一个for循环,但是遇到了问题。我想返回一个包含site、year和average的x数据帧,但它似乎将df$x中找到的所有变量的平均值作为第一个值,然后返回其余结果的NaNs。
下面是我的代码:
temp <- NULL;
mn.x <- NULL;
a <- NULL;
for(i in unique(df$site)) {
for (j in unique(df$year)) {
site <- i;
year <- j;
a <- data.frame(site, year);
temp <- mean(na.omit(df$x[df$site==i && df$year==j]))
site.year <- data.frame(a, temp)
mn.x <- rbind(temp, site.year)
}
}当我在R中输入mn.x时返回的clear...the结果是
>mn.x
[1] 10.4
[1] NaN
[1] NaN
[1] NaN
[1] NaN
...其中10.4是df$x的所有值的x的平均值(又称均值(df$x))
我的循环出了什么问题?或者,由于这是一个示例数据集,也许我的数据集确实存在问题?clarify...class(df$x)只是“数字”
感谢你的任何想法,
保罗
发布于 2013-11-22 11:05:31
一种流行的方法是使用plyr...
require(plyr)
ddply(df, .(site,year), summarize, xm=mean(x))https://stackoverflow.com/questions/20134101
复制相似问题