给出样本df(实际数据包含> 100列)
library(tidyverse)
df <- data.frame( x1 = runif(10),
x2 = runif(10),
y1 = runif(10),
y2 = runif(10)
)
如果我想要包含&#39; x&#39;的所有列的最小值,则以下内容将起作用:
df %>% mutate( minx = pmin( x1, x2, na.rm = TRUE ) )
x1 x2 y1 y2 minx
1 0.2524359 0.66834400 0.42970192 0.89407768 0.25243588
2 0.8854106 0.40131771 0.10842259 0.08260381 0.40131771
但是,当我想要选择包含&#39; x&#39; with contains(),但是以下失败....
df %>% mutate( minx = pmin( contains("x"), na.rm = TRUE ) )
Error in mutate_impl(.data, dots) :
Evaluation error: Variable context not set.
为什么不能使用contains()来选择用于pmap的列?我在这里做错了什么?
答案 0 :(得分:3)
使用基础R
df$minx <- apply(df[, grepl('x', names(df))], 1, min)
dplyr
解决方案可能是
library(dplyr)
df %>% mutate(minx = do.call(pmin, select(df, matches("x."))))
答案 1 :(得分:3)
这是一个选项
library(tidyverse)
df %>%
select(contains("x")) %>%
reduce(pmin) %>%
mutate(df, minx = .)
或者@Wimpel在评论中提到,select
可以嵌套在mutate
来电
df %>%
mutate(minx = select(., contains("x")) %>%
reduce(pmin, na.rm = TRUE))