如何在R的data frame中将列名转化为数据框内的实际列
报错原因
你使用的Data$Stat_Name <- colnames(Data[,6:10])代码报长度错误,是因为colnames(Data[,6:10])仅返回5个列名字符串(Points、OppPoints、Total、MOV、Spread),但你的Data有10行,两侧长度不匹配无法直接赋值。
实现代码
你需要先提取去重的Year+Date组合,再和统计列名做笛卡尔积拼接即可得到目标结果,两种常用实现方式如下:
基础R实现
# 提取去重的年份、日期组合 unique_year_date <- unique(Data[, c("Year", "Date")]) # 提取需要的统计列名 stat_cols <- colnames(Data[, 6:10]) # 笛卡尔积合并得到最终表 result <- merge(unique_year_date, data.frame(Stat_Name = stat_cols), all = TRUE)
tidyverse实现
library(dplyr) library(tidyr) result <- Data %>% distinct(Year, Date) %>% # 去重得到唯一的年份、日期对 crossing(Stat_Name = colnames(Data[, 6:10])) # 与统计列名做全量匹配
结果验证
生成的result表共3列,分别为Year、Date、Stat_Name,每一组唯一的Year+Date都会对应5行你需要的统计列名,符合你要求的输出格式。
内容的提问来源于stack exchange,提问作者Lcsballer1
相关产品推荐
相关产品推荐

