如何使用R删除特定两列中零或NA的行?

时间:2020-02-23 20:03:31

标签: r dataframe

我有一个包含多列的数据框。我有兴趣从两列中删除任何0或NA。请参阅下面的示例。

k

我尝试了以下操作:

logging:
  level:
    org.springframework.beans: TRACE

根据我收到的以下输出代码。

Input <- data.frame(DM = LETTERS[1:8], JM = LETTERS[19:26], CY = c(1,2,0,NA,5,34,0,NA), LY = c(2,4,NA,NA,-5,6,0,0))

DM  JM  CY  LY
A    S  1    2
B    T  2    4
C    U  0    NA
D    V  NA   NA
E    W  5    -5
F    X  34   6
G    Y  0    0
H    Z  NA   0

即使总和为0,我也希望获得输出。所需的输出:

Output<-Input[rowSums(Input[c("CY", "LY")], na.rm = TRUE) != 0, ]

3 个答案:

答案 0 :(得分:1)

我们可以将零转换为NA或将NA转换为0,然后在逻辑矩阵上使用rowSums并取反逻辑向量以对行进行子集化

Input[!!rowSums(replace(Input[c("CY", "LY")],
          is.na(Input[c("CY", "LY")]), 0) != 0),]
#   DM JM CY LY
#1  A  S  1  2
#2  B  T  2  4
#5  E  W  5 -5
#6  F  X 34  6

答案 1 :(得分:1)

这是一种两步法。

Input <- na.omit(Input)
Input[rowSums(Input[3:4] == 0) == 0, ]
#  DM JM CY LY
#1  A  S  1  2
#2  B  T  2  4
#5  E  W  5 -5
#6  F  X 34  6

还有一线。

Input[rowSums(Input[3:4] == 0 | is.na(Input[3:4])) == 0, ]

答案 2 :(得分:1)

这是删除所有NA或零的快速方法:

Input[Reduce(`&`, lapply(Input, function(x) x != 0 & !is.na(x))),]
#>   DM JM CY LY
#> 1  A  S  1  2
#> 2  B  T  2  4
#> 5  E  W  5 -5
#> 6  F  X 34  6