在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 如何在Rails创建表迁移中创建唯一索引?
- 有没有办法在Linq-to-XML查询中仅使用本地名称检索元素?
- opengl – 如何将int转换为const GLvoid *?
- sax错误:org.xml.sax.SAXParseException: Content is not
- 【木头Cocos2d-x 037】retain和release倒底怎么玩?
- tdd – 正确测试附加于$scope的承诺
- 从C#角度学习UML ……(我是初学者)
- ruby – 如何仅在某些路径上使用Rack中间件?
- ruby hash autovivification(facets)
- xml – 如何在qml中将二进制代码转换为png图像?