所以我有一个包含网站,年份和测量变量的数据集(比方说,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循环,但是遇到了麻烦。我想返回一个包含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时返回的结果是
>mn.x
[1] 10.4
[1] NaN
[1] NaN
[1] NaN
[1] NaN
...
其中10.4是df $ x的所有值的平均值x(aka mean(df $ x))
我的循环出了什么问题?或者,由于这是一个示例数据集,我的数据集实际上可能存在问题?只是为了澄清...... class(df $ x)是“数字”
感谢您的任何想法,
保罗
答案 0 :(得分:0)
一种流行的方法是使用plyr
...
require(plyr)
ddply(df, .(site,year), summarize, xm=mean(x))