R语言如何将数据框中多列日期及对应容量转为两列存储
解决方案
方法1:使用tidyverse包实现(推荐)
该方法适配你最后20列为日期列的场景,代码通用易调整:
# 未安装包先运行:install.packages("tidyverse") library(tidyverse) df_result <- df %>% pivot_longer( cols = last(20), # 直接选取最后20列作为要转换的日期列 names_to = "date", # 原日期列的列名存入新的date列 values_to = "capacity" # 原日期列的数值存入新的capacity列 )
如果你的日期列均以date为前缀,也可以将cols参数替换为cols = starts_with("date"),匹配更精准。
方法2:使用base R实现(无需安装额外包)
适合不想引入第三方依赖的场景:
# 配置参数:前3列为非日期属性列,剩余为日期列,可根据你的实际列数调整 non_date_col_num <- 3 date_cols <- (non_date_col_num + 1):ncol(df) df_result <- reshape( df, direction = "long", varying = date_cols, v.names = "capacity", timevar = "date", times = names(df)[date_cols] ) # 清理reshape生成的冗余列,重置行号 df_result <- df_result[, -ncol(df_result)] rownames(df_result) <- NULL
两种方法输出的结果均与你期望的结构完全一致。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

