【发布时间】:2019-11-04 20:28:46
【问题描述】:
我有一个小玩意:
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]>
我想使用coalesce() 将two 和three 列中的缺失值替换为one 列的值,然后将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 已被弃用,但我不确定用什么代替它。我想知道是否有人可以解释为什么上述方法不起作用,因为我完全不熟悉作用域动词的内部工作原理。
【问题讨论】:
标签: r data-manipulation purrr dplyr