R语言中如何展开列表列以消除层级并保留向量中的独立组件?
解决R语言中列表列转逗号分隔字符串的问题
你这里用unnest的思路偏了哦——unnest的作用是把列表列里的每个元素拆成单独的行,而你想要的是把每个列表中的向量元素合并成一个逗号分隔的字符串,这完全是两种不同的操作,所以才会出现错误。
下面给你两种简单的解决方案,都能得到你期望的输出:
方法一:使用purrr::map_chr遍历拼接
利用map_chr遍历a2列的每个列表元素,将每个向量用paste(..., collapse = ", ")拼接成单个字符串:
library(dplyr) library(purrr) mydf <- tibble( a1 = c(20, 21, 23, 45), a2 = list(c("Male", "Female"), c("Yes", "No"), c("Secondary", "Primary", "Tertiary"), c("13-14", "15-16", "17 - 18")) ) mydf1 <- mydf %>% mutate(a2 = map_chr(a2, ~paste(.x, collapse = ", ")))
方法二:使用rowwise()逐行处理
如果你不想加载purrr包,也可以用rowwise()让数据按行处理,再用paste拼接:
library(dplyr) mydf1 <- mydf %>% rowwise() %>% mutate(a2 = paste(a2, collapse = ", ")) %>% ungroup() # 记得取消行分组,避免后续操作受影响
执行任意一种方法后,你都会得到期望的结果:
# A tibble: 4 × 2 a1 a2 <dbl> <chr> 1 20 Male, Female 2 21 Yes, No 3 23 Secondary, Primary, Tertiary 4 45 13-14, 15-16, 17 - 18
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

