加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在R中,当不是所有因素组合都存在时,如何使用“聚合”或“通过”

发布时间:2020-12-14 04:51:06 所属栏目:百科 来源:网络整理
导读:这是一个用于说明我的数据的小例子: 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),0))) df subgroup feature var data1 s1 a 1 1.531526202 s2 a 1 1
这是一个用于说明我的数据的小例子:

> 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),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,FALSE),by = c("feature","var")]

     feature var    V1
[1,]       a   1  TRUE
[2,]       a   2  TRUE
[3,]       b   3 FALSE

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读