簡體   English   中英

根據多個列條件R過濾行

[英]Filter rows based on multiple column conditions R

假設我有一個包含100多列的數據集,我只需要保留數據中滿足一條條件應用於所有100列的數據。我該怎么做?

假設,它如下所示...我只需保留Col1或2或3或4中的任何一個> 0的行

Col1 Col2 Col3 Col4 
1 1 3 4 
0 0 4 2 
4 3 4 3 
2 1 0 2 
1 2 0 3 
0 0 0 0

在上面的例子中,除了最后一行之外,所有行都將成為它。我需要將結果放在與原始行相同的數據幀中。 不確定我是否可以使用lapply循環遍歷> 0的列或我可以使用子集..任何幫助表示贊賞

我可以使用列索引並執行df<-subset(df,c(2:100)>0) 這不能給我正確的結果。

假設您的data.frame是DF然后使用[將為您完成工作。

> DF[DF[,1]>0 | DF[,2] >0 | DF[,3] >0 | DF[,4] >0, ]
  Col1 Col2 Col3 Col4
1    1    1    3    4
2    0    0    4    2
3    4    3    4    3
4    2    1    0    2
5    1    2    0    3

如果您有數百個列,則可以使用此替代方法

> DF[rowSums(DF)=!0, ]
  Col1 Col2 Col3 Col4
1    1    1    3    4
2    0    0    4    2
3    4    3    4    3
4    2    1    0    2
5    1    2    0    3
dat <- read.table(header = TRUE, text = "
  Col1 Col2 Col3 Col4 
  1 1 3 4 
  0 0 4 2 
  4 3 4 3 
  2 1 0 2 
  1 2 0 3 
  0 0 0 0
")

您可以使用data.table自動容納data.frame碰巧擁有的許多列。 這是一種方法,但有一種更優雅的方法可以使用data.table:

require(data.table)
dt <- data.table(dat)

dt[rowSums(dt>0)>0]

#    Col1 Col2 Col3 Col4
# 1:    1    1    3    4
# 2:    0    0    4    2
# 3:    4    3    4    3
# 4:    2    1    0    2
# 5:    1    2    0    3

暫無
暫無

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

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