本文介绍了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及其值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-27 07:25