有没有一种方法或内置的R函数可以对列表中重复名称的值求和?

问题描述 投票:1回答:2

让我说我有这个清单:

values <- list(2, 8, 3, 21, 54, 2, 43, 31)
countries <- list('US', 'UK', 'China', 'US', 'Russia', 'UK', 'US', 'China')
names(values) <- countries

然后,值看起来像:('US' = 2, 'UK' = 8, 'China' = 3, 'US' = 21, 'Russia' = 54, 'UK' = 2, 'US' = 43, 'China' = 31)

R中是否有内置函数或一些简短的方法来添加重复项的值?含义是,使值变为:('UK' = 10, 'China' = 34, 'Russia' = 54, 'US' = 66)(顺序无关紧要)

r list duplicates names
2个回答
0
投票

一个选项可能是:

as.list(with(aggregate(values ~ ind, sum, data = stack(values)), 
             setNames(values, ind)))

$US
[1] 66

$UK
[1] 10

$China
[1] 34

$Russia
[1] 54

0
投票
sapply(unique(countries), function(x){sum(unlist(values[names(values)==x]))})

也可以。起初,我没有看到您有清单。


0
投票

使用tidyverse的选项

library(dplyr)
library(tibble)
library(tidyr)
enframe(values) %>%
    unnest(c(value)) %>% 
    group_by(name) %>% 
    summarise(value = sum(value)) %>%
    deframe %>% 
    as.list
© www.soinside.com 2019 - 2024. All rights reserved.