R - Список конкатенации элементов манипуляции - PullRequest
0 голосов
/ 27 мая 2018

Предположим, у меня есть list с 5 элементами:

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 ]

0 голосов
/ 27 мая 2018

Мы также можем использовать map_chr и paste.

library(purrr)

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

map_chr(lst, ~paste(.x, collapse = "-"))
# [1] "A"   "B"   "C"   "D"   "E-F"
0 голосов
/ 27 мая 2018

У тебя почти было это.Попробуйте

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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...