Суммируйте элементы в подсписках по категориям, к которым они принадлежат, по основному списку

Я хотел бы прикрепить значения к меткам на речном участке в 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 
Другие вопросы по тегам