объединить элементы списка списков с тем же именем - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть список из 4 списков с тем же именем:

lst1 <- 
list(list(c(1,2,3)),list(c(7,8,9)),list(c(4,5,6)),list(c(10,11,12)))
names(lst1) <- c("a","b","a","b")

Я хочу объединить подсписки (первый «a» со вторым «a», первый «b» со вторым «b»):

result <- list(list(c(1,2,3,4,5,6)),list(c(7,8,9,10,11,12)))
names(result) <- c("a","b")

Я пробовал несколько вещей, но не могу понять.

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Другой вариант - сначала использовать unlist, а затем split полученный вектор.

vec <- unlist(lst1)
split(unname(vec), sub("\\d+$", "", names(vec)))
#$a
#[1] 1 2 3 4 5 6

#$b
#[1]  7  8  9 10 11 12
0 голосов
/ 06 ноября 2018

Просто сгруппируйте элементы с одинаковыми именами и unlist их:

tapply(lst1,names(lst1),FUN=function(x) unname(unlist(x)))
0 голосов
/ 06 ноября 2018

Поскольку lst1["a"] не собирается давать нам все элементы lst1 с именем a, нам нужно работать с names(lst1). Один базовый подход R будет

nm <- names(lst1)
result <- lapply(unique(nm), function(n) unname(unlist(lst1[nm %in% n])))
names(result) <- unique(nm)
result
# $a
# [1] 1 2 3 4 5 6
#
# $b
# [1]  7  8  9 10 11 12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...