通过将列名称与R中另一个数据框中存在的分组变量进行匹配来在xts对象上进行聚合 数据聚合结果

我想有一个时间序列对象:

library(xts)

exposure <- xts(Google = c(100,200,300,400,500,600,700,800),Apple = c(10,20,30,40,50,60,70,80),Audi = c(1,2,3,4,5,6,7,8),BMW = c(1000,2000,3000,4000,5000,6000,7000,8000),AENA = c(50,51,52,53,54,55,56,57,58),order.by = Sys.Date() - 1:8) 

我有一个数据框:

map <- data.frame(Company = c("Google","Apple"," Audi","BMW"," AENA"),Country = c("US","US"," GERMANY","GERMANY"," SPAIN")) 

我想根据公司所映射的国家汇总曝光对象。基本上,我的输出将是一个xts对象,其索引与暴露相同,但列名称将是US,Germany,西班牙的名称。例如,对于美国列下的特定日期,我想要该日期Google和Apple的曝光总数。

欢迎任何帮助。

wangleaishang9 回答:通过将列名称与R中另一个数据框中存在的分组变量进行匹配来在xts对象上进行聚合 数据聚合结果

我认为您的原始数据规范有误。首先,将其移出xts格式,然后再次移回它。

数据

我对xts对象的创建方式进行了一些更改。我还清理了一些错误的空格。

library(xts)

df <- data.frame(Google = c(100,200,300,400,500,600,700,800),Apple = c(10,20,30,40,50,60,70,80),Audi = c(1,2,3,4,5,6,7,8),BMW = c(1000,2000,3000,4000,5000,6000,7000,8000),AENA = c(50,51,52,53,54,55,56,57)) 

exposure <- xts(df,order.by = Sys.Date() - 1:8)

map <- data.frame(Company = c("Google","Apple","Audi","BMW","AENA"),Country = c("US","US","GERMANY","SPAIN"),stringsAsFactors = F)

聚合

我使用tbl2xts转换格式。然后,我们使用dplyrtidyr将数据转换为长格式,将Country加入每个公司,并在Country上进行汇总。然后,我们将其转换回xts,将数据分散到各个国家/地区。

library(tbl2xts)
library(dplyr)
library(tidyr)

xts_tbl(exposure) %>%
  pivot_longer(-date,names_to = "Company") %>%
  left_join(map,by = "Company") %>%
  group_by(date,Country) %>%
  summarize(value = sum(value)) %>%
  ungroup() %>%
  tbl_xts(spread_by = "Country")

结果

           GERMANY SPAIN  US
2019-10-28    8008    57 880
2019-10-29    7007    56 770
2019-10-30    6006    55 660
2019-10-31    5005    54 550
2019-11-01    4004    53 440
2019-11-02    3003    52 330
2019-11-03    2002    51 220
2019-11-04    1001    50 110
本文链接:https://www.f2er.com/3157094.html

大家都在问