Используйте start_with внутри карты вместо явно именования
Я хочу применить функцию внутри тибла, но не хочу явно именовать столбцы. НАПРИМЕР
library(tidyverse)
library(tidyselect)
test = tibble(var1 = c("la", "le", "lu"), var2 = c("ma", "me", "mu"), var3 = c("fi", "fa", "fu"), dummy=1)
with_funct = test %>% mutate(blub = pmap_chr(list(var1, var2, var3), paste, sep='+'))
Я получаю ожидаемый результат:
# A tibble: 3 x 5
var1 var2 var3 dummy blub
<chr> <chr> <chr> <dbl> <chr>
1 la ma fi 1 la+ma+fi
2 le me fa 1 le+me+fa
3 lu mu fu 1 lu+mu+fu
Но вместо того, чтобы писать list(var1, var2, var3)
Я бы предпочел использовать starts_with("var")
но это не сработает.
Так что, если я использую
with_funct = test %>% mutate(blub = pmap_chr(starts_with("var"), paste, sep='+'))
Я получаю
"Ошибка: никакие переменные tidyselect не были зарегистрированы"
Буду признателен за любую помощь.
2 ответа
Вы могли бы использовать select()
внутри pmap_chr()
работать только над столбцами, которые начинаются с "var". Я использую точку для обозначения набора данных, используемого в mutate()
,
Одна из причин этого работает потому, что pmap()
работает по всей длине булыжника. То, как я использую это, столбцы используются в функции (paste()
в вашем случае) в порядке их появления в наборе данных.
test %>%
mutate(blub = pmap_chr(select(., starts_with("var")), paste, sep='+'))
# A tibble: 3 x 5
var1 var2 var3 dummy blub
<chr> <chr> <chr> <dbl> <chr>
1 la ma fi 1 la+ma+fi
2 le me fa 1 le+me+fa
3 lu mu fu 1 lu+mu+fu
Попробуй это:
with_funct2 = test %>% mutate(blub = pmap_chr(test %>% select(starts_with("var")), paste, sep='+'))
Надеюсь, поможет