2014-03-27 58 views
2

我有一個數據框,並且我想要選擇滿足特定條件的所有行,例如!= 0。我可以爲每一列做到這一點,但它確實是一條很長的路線。選擇滿足條件的多個列

df.Individual <- df.category[df.category[,10]!=0 & df.category[,9]!=0 ........ & df.category[,2]!=0, ][,1] 

我想選擇一組像這樣的列,但我不知道如何!

df.category[df.category[,c(10:5)]!=0 & c(6:2)]>0 ][,1] 

謝謝!

structure(list(Individual = structure(1L, .Label = c("aaa"), class = "factor"), `Class1` = 1L, 
`Class2` = 0L, `Class3` = 1L, `Class4 ` = 2L, `Class5` = 3L, `Class6` = 1L, Class7 = 1L, Class8 = 1L, Class9 = 1L), .Names = c("Individual", 
"Class1", "Class2", "Class3", "Class4", "Class5", "Class6", "Class7", "Class8", "Class9"), row.names = 2L, class = "data.frame") 

編輯:

我需要獲得所有的列組合。像循環一樣。我想要列出一個個人排序爲他們的班級在ggplot

的y軸上的因子水平作爲示例。但這裏列出了一些組合,我希望所有可能的列組合。

df.Individual.1 <- df.category[ df.category[,10]!=0 & 
           df.category[,9]!=0 & 
           df.category[,8]!=0 ,] [,1] 

df.Individual.2 <- df.category[ df.category[,10]!=0 & 
           df.category[,9]!=0 & 
           df.category[,8]<=0 ,] [,1] 

df.Individual.3 <- df.category[ df.category[,10]!=0 & 
           df.category[,9]<=0 & 
           df.category[,8]!=0 ,] [,1] 

df.Individual.4 <- df.category[ df.category[,10]!=0 & 
           df.category[,9]<=0 & 
           df.category[,8]<=0 ,] [,1] 

unlist(list(df.Individual.1,df.Individual.2,df.Individual.3,df.Individual.4)) 

最後,我需要一個列表與個人排序他們的課堂狀態。首先是所有階級的積極性,比第一階級積極,另一個是負的。

1 1 1 
1 1 0 
1 0 1 
1 0 0 
0 1 1 
0 1 0  
0 0 1 
0 0 0 

這裏是一個3列的例子。 謝謝!

回答

0

一種可能性:

df[apply(df[,-1]!=0,1,all),] 
4

我會用rowSums(比apply循環更快)。這裏是行,其中通過105僅具有非零的邏輯矢量:

rowSums(df.category[,c(5:10)] != 0) == (10-5+1) 

或更好:

rowSums(df.category[,c(5:10)] == 0) == 0 

您可以結合這樣的邏輯載體使用&,然後用它來從提取df.category:

logical1 <- rowSums(df.category[,c(5:10)] == 0) == 0 
logical2 <- rowSums(df.category[,c(2:6)] <= 0) == 0 
df.category[logical1 & logical2, ] 

編輯:你更新的問題是很多米礦石模糊,也許嘗試這樣的事情:

df <- df.category 
classes.col <- grep("Class", colnames(df), value = TRUE) 
df$Attended <- apply(df[classes.col] > 0, 1, paste, sep = "_") 
split(df$Individual, df$Attended) 
+0

我的問題是,我想要得到他們的類的個別訂單向量。首先所有positiv,然後所有其他組合 – user3300849

+0

那不是很清楚。 – flodel

+0

我編輯了我的問題,使其更清楚。謝謝! – user3300849