2014-03-27 143 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

相关问题