在R中将长格式时间序列转换为宽格式的方法?
长格式转指定宽格式的解决方案
你可以用tidyverse包中的pivot_wider()函数来实现,这个方法完全适配大规模/复杂数据集,不需要手动拼接向量。
具体代码实现:
首先确保加载tidyverse包:
library(tidyverse)
然后直接对ts_big进行转换:
ts_wide <- ts_big %>% pivot_wider( id_cols = dates, # 以日期为分组依据 names_from = types, # 用types列的值作为新列名的一部分 values_from = c(numbers_1, numbers_2), # 需要转换的数值列 names_glue = "{types}_{.value}" # 定义新列名的格式:类型_数值列名 )
转换后的结果:
运行上述代码后,ts_wide的结构完全符合你的需求:
# A tibble: 4 × 5 dates A_numbers_1 A_numbers_2 B_numbers_1 B_numbers_2 <chr> <dbl> <dbl> <dbl> <dbl> 1 2023-01-01 1 3 0.3 3 2 2023-02-01 2.8 5 0.9 5 3 2023-03-01 2.9 7.9 NA NA 4 2023-04-01 2 0.9 NA NA
适配复杂场景的优势:
- 不管有多少种
types类别,或是多少个类似numbers_1/numbers_2的数值列,只需调整names_from和values_from的参数即可,无需手动处理每一列 - 缺失的观测值会自动用
NA填充,无需额外处理
内容的提问来源于stack exchange,提问作者James Rider
相关产品推荐
相关产品推荐

