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

Ibr*_* B. 5 r list names duplicates

假设我有这个清单:

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

然后,值看起来像:('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) 顺序并不重要)

akr*_*run 3

一个选项使用tidyverse

library(dplyr)
library(tibble)
library(tidyr)
enframe(values) %>%
    unnest(c(value)) %>% 
    group_by(name) %>% 
    summarise(value = sum(value)) %>%
    deframe %>% 
    as.list
#$China
#[1] 34

#$Russia
#[1] 54

#$UK
#[1] 10

#$US
#[1] 66
Run Code Online (Sandbox Code Playgroud)

或者使用base R

as.list(tapply(unlist(values), names(values), sum))
#$China
#[1] 34

#$Russia
#[1] 54

#$UK
#[1] 10

#$US
#[1] 66
Run Code Online (Sandbox Code Playgroud)