使用NA'按类别向数据框添加平均列

时间:2014-09-19 10:54:56

标签: r

我正在尝试向我的数据框添加一个方法列,我可以在许多不同的列上运行一些代码,即使它们包含NA(我认为排除了很多可能性)。

我能做的最好的事情是:

TestData <- data.frame(geo=c(rep("AT",4),rep("DE",4)),time=c(rep(c(1990:1993),2)),value=c(NA,4,20,6,NA,NA,5,3))

mean <- aggregate(value~geo, TestData, mean)

按类别(地理位置)计算正确的均值。我怎样才能将它们连接到数据框,这样平均值不仅仅是一个观察点,而是在每个时间点出现?我正在考虑ddply,但无法让它正常工作。我正在寻找的数据框是:

    geo time    value   mean   (or optionally, no problem for me)
1   AT  1990    NA     10      NA
2   AT  1991    4      10      10
3   AT  1992    20     10      10
4   AT  1993    6      10      10
5   DE  1990    NA     4       NA
6   DE  1991    NA     4       NA
7   DE  1992    5      4       4
8   DE  1993    3      4       4

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

尝试:

 testData1 <-  within(TestData, {
                    Mean <- ave(value, geo, FUN=function(x) mean(x, na.rm=TRUE))
                    Mean[is.na(value)] <- NA}) #If you don't want `NA` values don't use this step


  testData1
  # geo time value Mean
 #1  AT 1990    NA   NA
 #2  AT 1991     4   10
 #3  AT 1992    20   10
 #4  AT 1993     6   10
 #5  DE 1990    NA   NA
 #6  DE 1991    NA   NA
 #7  DE 1992     5    4
 #8  DE 1993     3    4

如果您想查找名为mean的{​​{1}}多列的starts

例如:

value