R - 列表操作元素合并

3
假设我有一个包含5个元素的列表:

list

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

我正在尝试使用purrr将其转换为简单的字符向量,需要将具有两个字符串的列表元素合并为一个,以'-'分隔。输出应该如下所示:

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"

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

2个回答

4
你差点就做到了。试试看。
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"))

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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接