是否有一种方法或内置的R函数可以对列表中重复名称的值求和?
假设我有以下列表:是否有一种方法或内置的R函数可以对列表中重复名称的值求和?,r,list,duplicates,names,R,List,Duplicates,Names,假设我有以下列表: values <- list(2, 8, 3, 21, 54, 2, 43, 31) countries <- list('US', 'UK', 'China', 'US', 'Russia', 'UK', 'US', 'China') names(values) <- countries 值一个选项可以是: as.list(with(aggregate(values ~ ind, sum, data = stack(values)),
values <- list(2, 8, 3, 21, 54, 2, 43, 31)
countries <- list('US', 'UK', 'China', 'US', 'Russia', 'UK', 'US', 'China')
names(values) <- countries
值一个选项可以是:
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
同样有效。起初我没有看到您有列表。一个使用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
或使用base R
as.list(tapply(unlist(values), names(values), sum))
#$China
#[1] 34
#$Russia
#[1] 54
#$UK
#[1] 10
#$US
#[1] 66
太好了!我一直在摆弄和尝试aggregate(),但一直没有弄明白,谢谢!
as.list(tapply(unlist(values), names(values), sum))
#$China
#[1] 34
#$Russia
#[1] 54
#$UK
#[1] 10
#$US
#[1] 66