这是一个用于说明我的数据的小例子: df - data.frame(subgroup=rep(paste("s",1:3, sep=""), times=3), feature=c(rep("a",6), rep("b",3)), var=rep(1:3, each=3), data=c(rnorm(3,1), rnorm(3,2), rnorm(3,0))) df subgroup feature var
> df <- data.frame(subgroup=rep(paste("s",1:3, sep=""), times=3), feature=c(rep("a",6), rep("b",3)), var=rep(1:3, each=3), data=c(rnorm(3,1), rnorm(3,2), rnorm(3,0))) > df subgroup feature var data 1 s1 a 1 1.53152620 2 s2 a 1 1.25476445 3 s3 a 1 1.04221040 4 s1 a 2 1.68913400 5 s2 a 2 1.48290273 6 s3 a 2 1.62871854 7 s1 b 3 0.05278296 8 s2 b 3 -0.66623654 9 s3 b 3 -1.40006454
我想检查我的数据集中存在的feature-var的每个组合的“data”列的总和.更确切地说,我想在总和大于3时获得TRUE,否则为FALSE:
> result feature snp res 1 a 1 TRUE 2 a 2 TRUE 3 b 3 FALSE
我尝试使用“聚合”或“通过”,但不能使它们符合我的需要.任何的想法?提前致谢.
一种方法是使用plyr函数ddply对特征和var进行分组.您可以使用汇总函数创建一个新的data.frame,其列与您开发的规则相对应.library(plyr) ddply(df, c("feature", "var"), summarize, res = ifelse(sum(data) > 3,TRUE, FALSE))
结果是:
feature var res 1 a 1 TRUE 2 a 2 TRUE 3 b 3 FALSE
另一种方法是使用data.table,它应该提供一些性能优势:
library(data.table) dt <- data.table(df) dt[, ifelse(sum(data) > 3, TRUE, FALSE), by = c("feature", "var")] feature var V1 [1,] a 1 TRUE [2,] a 2 TRUE [3,] b 3 FALSE