本文介绍了dplyr :: select_if是否可以同时使用colnames及其值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在单个管道链中使用colnames及其值选择cols,而不引用其他对象,例如 NAMES<-names(d)
。我可以使用 select_if()
吗?
I want to select cols using colnames and their values in a single pipe chain without referring other objects, such as NAMES <- names(d)
. Can I do it with select_if()
?
例如
我可以使用colnames选择cols。
( select(matches(...))
仅处理colnames更聪明)。
I can use colnames to select cols.
(select(matches(...))
is smarter treating only colnames).
library(dplyr)
d <- iris %>% select(-Species) %>% tibble::as.tibble()
d %>% select_if(stringr::str_detect(names(.), "Petal"))
我可以使用这些值。
d %>% select_if(~ mean(.) > 5)
但是如何同时使用它们? (尤其是OR)
下面的代码是我想要的(当然,不要运行)。
But how to use both of them ? (especially OR)
Below code is what I want (of course, don't run).
d %>% select_if(stringr::str_detect(names(.), "Petal") | ~ mean(.) > 5)
任何帮助将不胜感激。
推荐答案
一种不太复杂的解决方法是:
A workaround that is not too complicated is:
d %>% select_if(stringr::str_detect(names(.), "Petal") | sapply(., mean) > 5)
# or
d %>% select_if(grepl("Petal",names(.)) | sapply(., mean) > 5)
其中给出:
# A tibble: 150 x 3
Sepal.Length Petal.Length Petal.Width
<dbl> <dbl> <dbl>
1 5.1 1.4 0.2
2 4.9 1.4 0.2
3 4.7 1.3 0.2
4 4.6 1.5 0.2
5 5.0 1.4 0.2
6 5.4 1.7 0.4
7 4.6 1.4 0.3
8 5.0 1.5 0.2
9 4.4 1.4 0.2
10 4.9 1.5 0.1
# ... with 140 more rows
这篇关于dplyr :: select_if是否可以同时使用colnames及其值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!