Объединить содержимое в списке списка по повторяющемуся имени - PullRequest
3 голосов
/ 08 сентября 2011

Учитывая список списков как таковой, есть ли элегантный способ конвертировать оригинал в обработанный? Я использую простые значения, такие как 1,2,3, но значения могут быть кадрами данных или что-то еще. Цель состоит не в том, чтобы дедуплицировать содержимое каждого уникального имени, просто в дедупликации имен путем слияния контента.

original = structure(list(name1 = structure(list(one = 1, two = 2, three = 3), .Names = c("one", 
"two", "three")), name2 = structure(list(a = 9), .Names = "a"), 
    name1 = structure(list(four = 4, five = 5, six = 6), .Names = c("four", 
    "five", "six")), name2 = structure(list(b = 8), .Names = "b")), .Names = c("name1", 
"name2", "name1", "name2"))

treated = structure(list(name1 = structure(list(one = 1, two = 2, three = 3, 
    four = 4, five = 5, six = 6), .Names = c("one", "two", "three", 
"four", "five", "six")), name2 = structure(list(a = 9, b = 8), .Names = c("a", 
"b"))), .Names = c("name1", "name2"))

1 Ответ

5 голосов
/ 08 сентября 2011

Вот решение с использованием plyr.

require(plyr)
lnames  = names(original)
ulnames = unique(lnames)
treated = plyr::llply(ulnames, function(x) original[lnames == x])
treated = llply(treated, unlist, recursive = F)
names(treated) = ulnames
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...