如何使用dplyr获取两列的平均值?

12
如何使用dplyr获取数据表中两列的平均值?例如,如果我的数据如下所示:
dt <- data.table(A=1:5, B=c(1,4,NA,6,8))
我想创建一个新列“平均值”,该列是每行列A和B的平均值:
dt %>% mutate(Avg=mean(c(A, B), na.rm=T))
但是这段代码并没有给我正确的结果。怎么办?非常感谢您。

1
你真的需要使用 dplyr 吗? - user3710546
3
平均值计算是我所有计算中的一个步骤,我需要使用dplyr进行其他计算。 - Carter
http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem - user3710546
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
27

如果您想使用dplyr来实现这个目标,我建议使用rowwise()函数:

    R> library(dplyr)
    R> dt <- data.table(A=1:5, B=c(1,4,NA,6,8))
    R> j <- dt %>% rowwise() %>% mutate(Avg=mean(c(A, B), na.rm=T)) 
    R> j
Source: local data frame [5 x 3]
Groups: <by row>

      A     B   Avg
  (int) (dbl) (dbl)
1     1     1   1.0
2     2     4   3.0
3     3    NA   3.0
4     4     6   5.0
5     5     8   6.5

19

你觉得怎样?

dt %>% mutate(Avg=rowMeans(cbind(A, B), na.rm=T))

mean 不支持向量化。它会将所有输入值合并成一个单一的值。如果您使用 cbind() 创建矩阵,则可以使用 rowMeans 来实现相同的功能。


这需要较少的时间。 - Marco

1
作为初始数据集是 data.table,我们可以使用 data.table 方法。
dt[, Avg:= mean(unlist(.SD), na.rm=TRUE) , .1:nrow(dt)]
dt
#   A  B Avg
#1: 1  1 1.0
#2: 2  4 3.0
#3: 3 NA 3.0
#4: 4  6 5.0
#5: 5  8 6.5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,