我有一个包含多列的数据框。我有兴趣从两列中删除任何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, ]
答案 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