Учитывая эти данные:dplyr: мутировать новый столбец на основе нескольких столбцов, выбранных переменной строкой
df=data.frame(
x1=c(2,0,0,NA,0,1,1,NA,0,1),
x2=c(3,2,NA,5,3,2,NA,NA,4,5),
x3=c(0,1,0,1,3,0,NA,NA,0,1),
x4=c(1,0,NA,3,0,0,NA,0,0,1),
x5=c(1,1,NA,1,3,4,NA,3,3,1))
Я хочу, чтобы создать дополнительный столбец min
для построчно минимального значения выбранных столбцов с помощью dplyr. Это легко, используя имена столбцов:
df <- df %>% rowwise() %>% mutate(min = min(x2,x5))
Но у меня есть большой ДФ с различными именами столбцов, поэтому мне нужно, чтобы сопоставить их с некоторой строки значений mycols
. Теперь другие потоки говорят мне использовать вспомогательные функции select, но я должен что-то пропускать. Вот matches
:
mycols <- c("x2","x5")
df <- df %>% rowwise() %>%
mutate(min = min(select(matches(mycols))))
Error: is.string(match) is not TRUE
one_of
И:
mycols <- c("x2","x5")
df <- df %>%
rowwise() %>%
mutate(min = min(select(one_of(mycols))))
Error: no applicable method for 'select' applied to an object of class "c('integer', 'numeric')"
In addition: Warning message:
In one_of(c("x2", "x5")) : Unknown variables: `x2`, `x5`
Что я с видом? Должно ли select_
работать? Это не в следующем:
df <- df %>%
rowwise() %>%
mutate(min = min(select_(mycols)))
Error: no applicable method for 'select_' applied to an object of class "character"
и также:
df <- df %>%
rowwise() %>%
mutate(min = min(select_(matches(mycols))))
Error: is.string(match) is not TRUE
Вы должны использовать SE версии dplyr глаголов при использовании строк. В этом случае используйте 'select_()' –
Не работает так, как я ожидал, что он будет работать: 'df <- df %>% rowwise()%>% mutate (min = min (select_ (mycols)))' yields "Error : no применимый метод для 'select_', примененный к объекту класса "character" " – strangeloop
Вы получаете ошибку с' match', поскольку она принимает строку (regex) как аргумент, а не вектор строки. – cderv