2017-04-07 517 views
-1

在我的數據框中,我有很多邏輯變量,並且我想將數據框分成多個子集,每個邏輯變量爲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://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/28481250#28481250關於編寫使一個容易再現的例子的代碼的一些指導。 – Frank

回答

0

一個簡單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

-1

你的問題很簡單。對於第一個子集,你可以使用:

subset1 <- df[df[ ,1]==T, ] 

在該函數取出具有的T第一列V1的值的行。

當然,如果你想爲這個工作設置一個完整的功能供以後使用,那麼@ thc的解決方案是最好的。但是,如果您只需要很快就可以獲得3個子集,請嘗試以上操作。

我會讓你弄清楚如何用subset2subset3來完成其餘的工作。

相關問題