【发布时间】:2018-02-13 07:12:52
【问题描述】:
我想根据其他列中的值对某些列进行行平均。如果我们采用以下数据集:
library(data.table)
test <- data.table(s1=c(0,4,29,9,1,2,10),
s2=c(20,17,11,15,32,15,10),
s3=c(1,0,2,1,4,7,0),
m1=c(0,4,29,NA,1,22,8),
m2=c(20,17,NA,15,32,15,12),
m3=c(1,0,1,1,1,NA,0),
z=c(1,5,25,5,30,20,10)
)
我想取s1, s2, s3 的平均值并根据m1, m2, m3、z 的值创建一个新列;具体使用以下条件。
ifelse( !is.na(m) & m<z, s, NA)
也就是说,如果m 不是NA 和m < z,那么只有s 才应该考虑行平均。
到目前为止,我已经完成了这项工作,但似乎太冗长了
test[,t1:=ifelse(!is.na(m1) & m1<z,s1,NA),]
test[,t2:=ifelse(!is.na(m2) & m2<z,s2,NA),]
test[,t3:=ifelse(!is.na(m3) & m3<z,s3,NA),]
test[,s_avg:=rowMeans(.SD,na.rm = TRUE),.SDcols=c('t1','t2','t3')]
我们也将赞赏另一种 data.frame 解决方案。
编辑: t 列是不需要的。
【问题讨论】:
标签: r data.table mean