我想在单个管道链中使用colnames及其值来选择cols,而不引用其他对象,例如NAMES <- names(d)
。我可以使用select_if()
吗?
例如,
我可以使用colnames来选择cols
(select(matches(...))
更聪明地处理colnames)。
library(dplyr)
d <- iris %>% select(-Species) %>% tibble::as.tibble()
d %>% select_if(stringr::str_detect(names(.), "Petal"))
我可以使用这些值。
d %>% select_if(~ mean(.) > 5)
但如何使用它们? (特别是OR)
下面的代码是我想要的(当然,不要运行)。
d %>% select_if(stringr::str_detect(names(.), "Petal") | ~ mean(.) > 5)
非常感谢任何帮助。
答案 0 :(得分:9)
不太复杂的解决方法是:
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