首页 > 解决方案 > 如何使用 R 删除特定两列中为零或 NA 的行?

问题描述

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

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

我试过以下:

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

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

DM  JM  CY  LY
A    S  1    2
B    T  2    4
F    X  34   6

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

DM  JM  CY  LY
A    S  1    2
B    T  2    4
E    W  5    -5
F    X  34   6

标签: rdataframe

解决方案


我们可以将零转换为 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

推荐阅读