R dpylr select_if具有多个条件

大卫

我想按名称选择所有数字变量以及一些变量。我设法使用select_if获取数字变量并选择按名称获取变量,但是无法将两者合并为一条语句

x = data.table(c(1,2,3),c(10,11,12),c('a','b','c'),c('x','y','z'), c('l', 'm','n'))

我希望我的结果是:

V1 V2 V4 V5
1 10  x l
2 11  y m
3 12  z n

我试过了但是没用

y = x %>%
select_if(is.numeric, V4, V5)
爱潮

如果我们有数据框,则x

x = data.frame(V1=c(1,2,3),V2=c(10,11,12),V3=c('a','b','c'),V4=c('x','y','z'),V5=c('l', 'm','n'), stringsAsFactors=FALSE)
##  V1 V2 V3 V4 V5
##1  1 10  a  x  l
##2  2 11  b  y  m
##3  3 12  c  z  n

其中,V1V2实际上numeric和列的其余部分都没有的因素,那么我们可以这样做:

library(dplyr)
y <- x %>% select_if(function(col) is.numeric(col) | 
                                   all(col == .$V4) | 
                                   all(col == .$V5))
##  V1 V2 V4 V5
##1  1 10  x  l
##2  2 11  y  m
##3  3 12  z  n

并不是说这是最好的做法,但是它确实可以完成您想要的事情。这里的问题是select_if期望其函数返回与所有列相对应的布尔向量。

另一种方法是使用select

y <- x %>% select(which(sapply(.,class)=="numeric"),V4,V5)
##  V1 V2 V4 V5
##1  1 10  x  l
##2  2 11  y  m
##3  3 12  z  n

可能更好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章