r语言 - 使用 DPLYR 的 Select If 函数根据范围条件选择列



我有一个数据集:

var1 <- c(333, 213, 456)
var2 <- c(3, 10, 500)
var3 <- c(356, 813, 856)
var4 <- c("aaa", "bbb", "ccc")
var5 <- c(589, 111, 989)
dataset <- data.frame(var1, var2, var3, var4, var5)

我想根据值范围保留列:子集列的所有值必须在 99 到 1000 之间。

我试过什么:

library (dplyr)
dataset2 <- dataset %>%
select_if(~.>99 & . <1000)

我想要什么 :

数据集2 : var1, var3, var 4

你也可以做:

dataset %>%
select_if(~ is.numeric(.) && all(between(., 99, 1000)))
var1 var3 var5
1  333  356  589
2  213  813  111
3  456  856  989

dplyr-purrr解决方案可以是:

dataset %>%
select_if(is.numeric) %>% 
purrr::keep(~all(.x <=1000))
var1 var2 var3 var5
1  333    3  356  589
2  213   10  813  111
3  456  500  856  989

使用 base-R 的Filter

Filter(function(x) is.numeric(x) && min(x) > 99 && max(x) < 1000, dataset)
#>   var1 var3 var5
#> 1  333  356  589
#> 2  213  813  111
#> 3  456  856  989

这是迄今为止使用purrrkeepdiscard给出的所有答案的组合

purrr::keep(dataset, ~is.numeric(.) && min(.) >= 99 && max(.) <= 1000)
#  var1 var3 var5
#1  333  356  589
#2  213  813  111
#3  456  856  989

并带有discard

purrr::discard(dataset, ~!is.numeric(.) || min(.) < 99 || max(.) > 1000)

最新更新