这是一个小例子来说明我的数据:
> 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
我想检查数据集中存在的每个特征变量组合的“数据”列的总和。更准确地说,我想在总和大于 3 时获得 TRUE,否则获得 FALSE:
> result
feature snp res
1 a 1 TRUE
2 a 2 TRUE
3 b 3 FALSE
我尝试使用“aggregate”或“by”,但无法让它们满足我的需要。任何的想法?提前致谢。
最佳答案
一种方法是使用 plyr
的功能 ddply
对功能和变量进行分组。您可以使用 summarize
创建新的函数 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
关于r - 在 R 中,当并非所有因素组合都存在时,如何使用 "aggregate"或 "by"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666700/