R Studio中如何将data frame列名转为Year列、列值转为Values列
把宽格式数据框转换为长格式(Year + Values)
你的数据属于宽格式(年份作为列名,每列对应对应年份的数值),要转换成目标的长格式(两列:Year存年份、Values存对应数值),用R里的tidyverse工具包最适合新手操作,步骤如下:
方法一:使用tidyr::pivot_longer(推荐)
- 安装并加载tidyverse包(第一次使用需要安装,之后只需加载)
install.packages("tidyverse") library(tidyverse)
- 执行格式转换(假设你的数据框名为
df,如果实际名称不同,替换成你的数据框名)
# 将除了Country列之外的所有列转成长格式 df_long <- df %>% pivot_longer( cols = -Country, # 指定不需要转换的列(这里是Country) names_to = "Year", # 原列名(年份)存入新列Year values_to = "Values" # 原列的数值存入新列Values ) # 查看转换结果的前几行 head(df_long)
- 可选:如果
Year列是字符型(比如"2001"),转成数值型
df_long <- df_long %>% mutate(Year = as.numeric(Year))
方法二:使用基础R的reshape函数
如果不想安装额外包,用基础R的reshape函数也能实现:
df_long <- reshape( df, direction = "long", varying = colnames(df)[-1], # 指定要转换的年份列(除了Country) v.names = "Values", # 数值列的名称 timevar = "Year", # 年份列的名称 times = colnames(df)[-1] # 年份值来自原列名 ) # 整理行名和列顺序 rownames(df_long) <- NULL df_long <- df_long[, c("Country", "Year", "Values")]
内容的提问来源于stack exchange,提问作者Bryan Hii
相关产品推荐
相关产品推荐

