Используйте start_with внутри карты вместо явно именования - PullRequest
0 голосов
/ 27 марта 2019

Я хочу применить функцию внутри таблицы, но я не хочу явно именовать столбцы.EG

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 ]

2 голосов
/ 27 марта 2019

Попробуйте это:

with_funct2 = test %>% mutate(blub = pmap_chr(test %>% select(starts_with("var")), paste, sep='+'))

Надеюсь, это поможет

1 голос
/ 27 марта 2019

Вы можете использовать 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
...