Суммируйте элементы в подсписках по категориям, к которым они принадлежат, по основному списку
Я хотел бы прикрепить значения к меткам на речном участке в R. Это вторая (сбивающая с толку) часть моей проблемы, которую я решил разделить на два первых: Суммирование каждого списка числовых значений в списке
У меня есть список списков значений, который требуется для отображения потоков между узлами, например:
edges <- list( A= list( C= 10, E= 5 ),
B= list( C= 10 ),
C=list(D = 13, E = 7 ))
Вопрос: Как получить суммы элементов в подсписках по всему списку, например:
C 20
D 13
E 12
Я предполагаю, что элементы должны быть сначала извлечены во фрейм данных, а затем суммированы. Или есть какая-то формула, которая разлагает подсписки, а затем суммирует содержащиеся в них элементы в соответствии с категориями (C, D, E).
Мне было интересно использовать функции sapply sapply, но сделать это в нескольких списках кажется очень сложным.
2 ответа
library(data.table)
colSums(rbindlist(edges, fill=T), na.rm=T)
# C E D
#20 12 13
Или же:
library(dplyr)
colSums(bind_rows(edges), na.rm=T)
# C E D
#20 12 13
Мы можем использовать base R
un1 <- unlist(edges)
tapply(un1, sub(".*\\.", "", names(un1)), FUN = sum)
# C D E
# 20 13 12