簡體   English   中英

選擇滿足條件的多列

[英]select multiple column that meet a condition

我有一個數據框,我想選擇滿足特定條件的所有行,例如!= 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")

編輯:

我需要獲取所有列組合。 類似於for循環。 我想為他們的班級排序一個個人列表,以用作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))

最后,我需要一個列表,其中包含針對其課程狀態進行排序的個人。 First All Class positiv,而不是頭等艙positiv,另一個都是負數。

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列的示例。 謝謝!

我會用rowSums (比快得多apply循環)。 這是行的邏輯向量,其中第5到第10列僅具有非零值:

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)

一種可能性:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM