如何使用R中的dplyr根据跨越多列的标准筛选数据帧



我有一个包含92个变量和1900个观测值的数据框架。从本质上讲,我把物种ID作为我感兴趣的变量,把相对丰度作为其他变量。

第69:92列(23列(是范围从0-10的质量控制变量。我想过滤我的数据,使每个物种至少有4个质量控制变量>5.到目前为止,我想到的最好的东西不是我想要的,而是至少在我有至少一个QC变量的基础上过滤数据>5并且行的总和大于100:

df_QC <-  df %>%
filter_at(vars(contains("QC")), any_vars(. >= 5))%>% 
rowwise()%>% 
mutate(total = sum(c_across(69:92)))
filter(total >99.9) 

有没有办法按照我想要的方式解决它?

重申一下,如果QC>5,用于至少4个QC变量。

我的数据有点大,所以让我们使用一个较小的数据集来复制这个问题。虹膜数据,但添加了一些质量控制变量:

df <-cbind(iris, data.frame(qc1 = sample(0:10, size=150, replace=TRUE),
qc2 = sample(0:10, size=150, replace=TRUE),
qc3 = sample(0:10, size=150, replace=TRUE),
qc4 = sample(0:10, size=150, replace=TRUE),
qc5 = sample(0:10, size=150, replace=TRUE)))
#Then similarly I would do a filtering that is not really what I want:
df_QC <-  df %>%
filter_at(vars(contains("QC")), any_vars(. >= 5))%>% 
rowwise()%>% 
mutate(total = sum(c_across(6:10)))%>%
filter(total >15) 

因此,对于这个示例数据,我如何用QC>5,至少3个QC?

提前感谢您的帮助!

这里有一种使用rowSums的方法。基本上计算值的数量>=每行5,并检查该数字是否大于或等于4。

dplyr

library(dplyr)
df %>% 
filter(rowSums(.[str_c("qc", 1:5)] >= 5) >= 4)

基数R

df[rowSums(df[paste0("qc", 1:5)] >= 5) >= 4, ]

输出

Sepal.Length Sepal.Width Petal.Length Petal.Width    Species qc1 qc2 qc3 qc4 qc5
1           4.8         3.4          1.6         0.2     setosa   6   9   5  10  10
2           5.8         4.0          1.2         0.2     setosa   9   8   3   7   5
3           5.7         3.8          1.7         0.3     setosa   4  10   9   7   7
4           5.1         3.3          1.7         0.5     setosa   7   6  10   1   7
5           4.8         3.4          1.9         0.2     setosa   1   6   6   7   7
6           5.2         3.5          1.5         0.2     setosa   5   1   6   6   7
7           5.5         3.5          1.3         0.2     setosa  10   3   6   6   6
8           4.9         3.6          1.4         0.1     setosa   8   4  10   8   6
9           4.4         3.0          1.3         0.2     setosa   1   8   5   6  10
10          5.0         3.5          1.3         0.3     setosa   9   9   5   9   1
...

最新更新