r - 使用 NA 按类别将平均列添加到数据框

标签 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

如有任何帮助,我们将不胜感激!

最佳答案

尝试:

 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

如果您想查找以名称开头的多个列的平均值:

例如:

 TestData1 <- TestData
 TestData1$value2 <- c(4, NA, 25, NA, NA, 10,5, 2)


 library(dplyr)

 res <- left_join(TestData1,
              TestData1 %>% 
                        group_by(geo) %>%
                        mutate_each(funs(mean=mean(., na.rm=TRUE)), starts_with("value")), 
                          by=c("geo", "time"))


 colnames(res) <- gsub("\\.y$", ".mean", colnames(res))
 res
 #  geo time value.x value2.x value.mean value2.mean
 #1  AT 1990      NA        4         10   14.500000
 #2  AT 1991       4       NA         10   14.500000
 #3  AT 1992      20       25         10   14.500000
 #4  AT 1993       6       NA         10   14.500000
 #5  DE 1990      NA       NA          4    5.666667
 #6  DE 1991      NA       10          4    5.666667
 #7  DE 1992       5        5          4    5.666667
 #8  DE 1993       3        2          4    5.666667

关于r - 使用 NA 按类别将平均列添加到数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25932302/

相关文章:

从省略上三角部分的文件中读取对称矩阵

r - R 中的数值积分

r - R 中的 3d 曲面图与 plotly

python - Pandas:使用变量从变量名称创建具有一行和一列名称的数据框

regex - 如何在R中转义问号?

r - 如何确定与 read.fwf 一起使用的正确文件编码(或使用变通方法删除不符合要求的字符)

r - 在 R : remove commas from a field AND have the modified field remain part of the dataframe

r - 为什么我的重复阶乘 aov 无法识别我的样本大小?

r - R中随机森林的并行执行

r - R 中 nlme 包中的 gls 函数出错