在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 

感谢您的帮助!

+0

“假设这是我的df” - 不可能,因为'data.frame(V = c(T,T,F))'不会像TT F那样打印。请参阅http://*.com/questions/5963269/how-to-make-a-great-r-reproducible-example/28481250#28481250关于编写使一个容易再现的例子的代码的一些指导。 – Frank

一个简单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个子集,请尝试以上操作。

我会让你弄清楚如何用subset2subset3来完成其余的工作。