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