R语言中按id与date分组将长数据重塑为宽格式的问题求解
你之前代码的核心问题是生成组内序号时的分组维度错误:原代码仅按date字段分组,会导致不同id的同日期数据被归入同一组生成连续序号,和你需要的「同一个id+同一个日期组合下生成序号」的逻辑不符。
基础R修正方案
直接调整ave的分组字段即可:
# 按id+date双维度分组生成组内行号 dateno <- with(mydata_1, ave(value, id, date, FUN = seq_along)) test2 <- transform(mydata_1, dateno = dateno) mydata_2 <- reshape(test2, dir = "wide", idvar = c("id","date"), timevar = "dateno")
运行后输出结果和你预期的mydata_2完全一致。
tidyverse 简洁方案
如果使用tidyverse生态工具,代码逻辑更直观:
library(dplyr) library(tidyr) mydata_2 <- mydata_1 %>% group_by(id, date) %>% mutate(seq = paste0("value.", row_number())) %>% pivot_wider(names_from = seq, values_from = value) %>% ungroup()
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

