r语言 - 通过保留分组变量删除跨多个列具有 0 的行



我有一个数据集,所有列都为零。我需要删除零的行。但我想保留其他行。另外,我不想破坏分组变量。

Participant  Media B     C     D
A1           C11   0.5   0     0
A1           C12   0.4   0.3   0
A1           C13   0     0     0
A2           C11   0     0     0
A2           C12   1     2     0
A2           C13   2     0     0

我在dplyr中应用了多个过滤器功能。它对我的数据集没有帮助。

data <- data%>%
filter(data, B > 0 & C > 0 & D >0)

有没有在不中断数据帧的情况下对数据进行子集化的快速方法?

预期产出

Participant  Media B     C     D
A1           C11   0.5   0     0
A1           C12   0.4   0.3   0
A2           C12   1     2     0
A2           C13   2     0     0

我们可以使用filter_at

library(dplyr)
data %>%
filter_at(vars(B:D), any_vars(. != 0))
#  Participant Media   B   C D
#1          A1   C11 0.5 0.0 0
#2          A1   C12 0.4 0.3 0
#3          A2   C12 1.0 2.0 0
#4          A2   C13 2.0 0.0 0

数据

data <- structure(list(Participant = c("A1", "A1", "A1", "A2", "A2", 
"A2"), Media = c("C11", "C12", "C13", "C11", "C12", "C13"), B = c(0.5, 
0.4, 0, 0, 1, 2), C = c(0, 0.3, 0, 0, 2, 0), D = c(0L, 0L, 0L, 
0L, 0L, 0L)), class = "data.frame", row.names = c(NA, -6L))

也许你可以试试下面的代码

subset(data,rowSums(data[-(1:2)])!=0)

这样

> subset(data,rowSums(data[-(1:2)])!=0)
Participant Media   B   C D
1          A1   C11 0.5 0.0 0
2          A1   C12 0.4 0.3 0
5          A2   C12 1.0 2.0 0
6          A2   C13 2.0 0.0 0

最新更新