У меня есть тибль:
df = tibble(one = list('a', 'b'), two = list(c('p1', 'p2', 'p3'), NA_character_), three = list(NA_character_, c('z1', 'z2', 'z3')))
df
# A tibble: 2 x 3
one two three
<chr> <list> <list>
1 a <chr [3]> <chr [1]>
2 b <chr [1]> <chr [3]>
Я хотел бы заменить отсутствующие значения в столбцах two
и three
значениями столбца one
, используя coalesce()
, а затем свернуть каждый символьный вектор (в ряд) в two
и three
в единственная строка, использующая toString()
. Мой ожидаемый результат выглядит так:
df = tibble(one = c('a', 'b'), two = list('p1, p2, p3', 'b'), three = list('a', 'z1, z2, z3'))
df
# A tibble: 2 x 3
one two three
<chr> <list> <list>
1 a <chr [1]> <chr [1]>
2 b <chr [1]> <chr [1]>
Это то, что я пробовал изначально:
df %>% mutate_at(vars(two, three), funs(coalesce(., one) %>% map(., toString)))
Я знаю, что funs()
цитирует свои аргументы, но я не понимаю, почему он не работает с конвейером. Документация также сообщает, что funs
устарела, но я не уверен, что использовать вместо него. Мне было интересно, может ли кто-то пролить свет на то, почему вышеперечисленное не работает, так как я совсем не знаком с внутренней работой глаголов с ограниченным кругом.