计算值表示R中数据框中每个站点和年份的值

时间:2013-11-21 23:29:26

标签: r

所以我有一个包含网站,年份和测量变量的数据集(比方说,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)是“数字”

感谢您的任何想法,
保罗

1 个答案:

答案 0 :(得分:0)

一种流行的方法是使用plyr ...

require(plyr)
ddply(df, .(site,year), summarize, xm=mean(x))