在R中,如何根据多个分类变量将数据拆分为多个子集的列表?
问题描述:
在我的数据框中,我有很多逻辑变量,并且我想将数据框分成多个子集,每个逻辑变量为TRUE。例如,假设这是我的DF:在R中,如何根据多个分类变量将数据拆分为多个子集的列表?
V1 V2 V3 V4
1 TRUE TRUE FALSE 2
2 TRUE FALSE TRUE 5
3 FALSE TRUE FALSE 4
所以我想有三个子集:
[1]
V1 V2 V3 V4
1 TRUE TRUE FALSE 2
2 TRUE FALSE TRUE 5
[2]
V1 V2 V3 V4
1 TRUE TRUE FALSE 2
2 FALSE TRUE FALSE 4
[3]
V1 V2 V3 V4
1 TRUE FALSE TRUE 5
感谢您的帮助!
答
一个简单lapply循环应该做的伎俩:
read.table(textConnection("V1 V2 V3 V4
T T F 2
T F T 5
F T F 4"), header=T) -> df
lapply(1:(ncol(df)-1), function(i) {
subset(df, df[[i]])
})
[[1]]
V1 V2 V3 V4
1 TRUE TRUE FALSE 2
2 TRUE FALSE TRUE 5
[[2]]
V1 V2 V3 V4
1 TRUE TRUE FALSE 2
3 FALSE TRUE FALSE 4
[[3]]
V1 V2 V3 V4
2 TRUE FALSE TRUE 5
+0
或简单地'lapply(df [, - 4],subset,x = df)' – HubertL
答
你的问题很简单。对于第一个子集,你可以使用:
subset1 <- df[df[ ,1]==T, ]
在该函数取出具有的T
第一列V1的值的行。
当然,如果你想为这个工作设置一个完整的功能供以后使用,那么@ thc的解决方案是最好的。但是,如果您只需要很快就可以获得3个子集,请尝试以上操作。
我会让你弄清楚如何用subset2
和subset3
来完成其余的工作。
“假设这是我的df” - 不可能,因为'data.frame(V = c(T,T,F))'不会像TT F那样打印。请参阅http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/28481250#28481250关于编写使一个容易再现的例子的代码的一些指导。 – Frank