如何用R基础包或dplyr将表格转置为日期行、国家列的矩阵?
解决方案
要把数据转成日期为行、国家为列的矩阵,用你已加载的dplyr就能搞定(如果允许用配套的tidyr会更简洁,严格只用列出的库就用base R配合),具体代码如下:
推荐方法(dplyr + tidyr)
tidyr是dplyr的常用配套库,很多R环境里和dplyr同属tidyverse体系,用pivot_wider一步转宽格式,再转矩阵:
library("eurostat") library("dplyr") library("tidyr") # 若已安装tidyverse可省略单独加载 d <- get_eurostat("prc_hicp_manr") %>% filter(coicop == "CP00") %>% # 将国家作为列名,数值对应填充,行保留日期 pivot_wider(names_from = geo, values_from = values) %>% # 把日期列设为行名,再转换为矩阵 column_to_rownames(var = "time") %>% as.matrix()
严格仅用指定库的方法(dplyr + base R)
如果只能用eurostat和dplyr,就用base R的reshape函数配合处理:
library("eurostat") library("dplyr") d <- get_eurostat("prc_hicp_manr") %>% filter(coicop == "CP00") %>% as.data.frame() %>% reshape( idvar = "time", # 行标识为日期 timevar = "geo", # 列标识为国家 direction = "wide", # 转换为宽格式 v.names = "values" # 要填充的数值列 ) %>% # 去掉列名里的"values."前缀,让列名直接为国家代码 rename_with(~ gsub("values\\.", "", .), starts_with("values.")) %>% # 设置日期为行名并转换为矩阵 column_to_rownames(var = "time") %>% as.matrix()
补充说明:
get_eurostat返回的time列默认是Date类型,无需额外转换即可作为行索引- 转换后的矩阵中,每一行对应一个月份,每一列对应一个欧盟国家/地区,单元格值为对应国家的HICP月度通胀数据
内容的提问来源于stack exchange,提问作者Ola
相关产品推荐
相关产品推荐

