R - 列出操作元素串联

时间:2018-05-26 21:05:41

标签: r purrr

假设我有一个包含5个元素的list

list <- list("A", "B", "C", "D", c("E", "F"))

我试图使用purrr将其返回到一个简单的字符向量,需要将具有两个字符串的列表元素组合成一个,用分隔符分隔,例如&#39; - &#39;。输出应如下所示:

chr [1:5] "A" "B" "C" "D" "E-F" 

我尝试了很多方法,包括paste,paste0,str_c以及我挂起的地方似乎map将函数应用于列表元素的每个字符串而不是字符串组一个元素(当有多个元素时)。我得到的结果是:

list2 <- unlist(map(list, str_flatten))
str(list2)

返回:

chr [1:5] "A" "B" "C" "D" "EF" 

我需要在E和F之间使用连字符:

chr [1:5] "A" "B" "C" "D" "E-F"

当我尝试将一个函数作为parenthetiinton传递给str_flatten()时,例如str_flatten(list, collapse = "-"),它不起作用。最大的问题是我无法弄清楚要在str_flatten中作为参数传递的字符串,以便将列表中给定元素的两个字符串分组。

2 个答案:

答案 0 :(得分:3)

你几乎拥有它。尝试

library(purrr)
library(stringr)
unlist(map(lst, str_flatten, collapse = "-"))
#[1] "A"   "B"   "C"   "D"   "E-F"

您也可以使用map_chr

map_chr(lst, str_flatten, collapse = "-")

没有额外的套餐,感谢@ G.Grothendieck,你可以做到

sapply(lst, paste, collapse = "-")

数据

lst <- list("A", "B", "C", "D", c("E", "F"))

答案 1 :(得分:0)

我们还可以使用map_chrpaste

library(purrr)

lst <- list("A", "B", "C", "D", c("E", "F"))

map_chr(lst, ~paste(.x, collapse = "-"))
# [1] "A"   "B"   "C"   "D"   "E-F"