r - 在 R 中,当并非所有因素组合都存在时,如何使用 "aggregate"或 "by"?

标签 r aggregate

这是一个小例子来说明我的数据:

> 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/

相关文章:

r - 如何在 dplyr::across() 中使用 n() 按组计算行数?

r - 将 geom_area 的区域调整为 geom_line 的一条线

r - 使用UTF-16LE编码读取csv的快速方法

redis - 使用lua的redis列表上的数值函数

r - 同时为 dplyr 中的分组值导出唯一值和汇总值的有效方法

r - 使用 readxlsb 和 cellranger::cell_limits() 获取所有小数位

r - 在data.table中按组cbind列表的有效方法

repository - 领域驱动设计 - 存储库和聚合根

elasticsearch - 非常慢的 elasticsearch 术语聚合。如何提高?

python - 在附加条件下与 pd.NamedAgg 聚合