我有一个数据框 DF
,我想根据几个选定列的条件对其进行过滤。
例如,我想过滤 DF 中满足以下条件的行:PCS_AB
、PCS_AD 列中包含任何小于 0.03 的值
,PCS_BD
。
DF <- cbind.data.frame(A = c(100, 10, 13),
B = c(33, 44, 12),
D = c(110, 21, 22),
PCS_AB = c(0.03, 0.001, 0.3),
PCS_AD = c(0.01, 0.2, 0.33),
PCS_BD = c(0.99, 1.0, 0.45))
我可以通过下面的代码实现:
DF_filter <- DF %>%
filter(PCS_AB < 0.03 | PCS_AD < 0.03 | PCS_BD < 0.03)
但我想要更简单的伪代码如下:
DF2 <- DF %>%
filter(any(starts_with("PCS")) < 0.03)
dplyr 可以吗?谢谢。
最佳答案
我们可以使用 dplyr
的 1.0.4
版本的 if_any
library(dplyr)
DF %>%
filter(if_any(starts_with("PCS"), ~ . <= 0.03))
-输出
# A B D PCS_AB PCS_AD PCS_BD
#1 100 33 110 0.030 0.01 0.99
#2 10 44 21 0.001 0.20 1.00
filter_at
和 any_vars
也是可能的(即将弃用)
DF %>%
filter_at(vars(starts_with("PCS")), any_vars(. <= 0.03))
-输出
# A B D PCS_AB PCS_AD PCS_BD
#1 100 33 110 0.030 0.01 0.99
#2 10 44 21 0.001 0.20 1.00
或者使用rowSums
创建逻辑向量
DF %>%
filter(rowSums(select(., starts_with('PCS')) < 0.03) > 0)
关于R dplyr 根据多个选定列的条件过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67038464/