如何将R语言中的宽格式数据集转换为长格式?
将宽格式数据集转换为长格式的R实现
你可以使用tidyverse包中的pivot_longer函数轻松完成宽转长的操作,以下是具体步骤:
- 首先确保安装并加载
tidyverse包:
# 如果未安装tidyverse,先执行安装 # install.packages("tidyverse") library(tidyverse)
- 运行转换代码:
# 转换宽格式df1为长格式 df_long <- df1 %>% pivot_longer( cols = starts_with("yr"), # 选择所有以"yr"开头的列 names_to = c("index", ".value"), names_pattern = "yr(\\d)(.*)" # 按"yr+数字+后缀"的规则拆分变量名 ) %>% rename(yr_time = `_time`) %>% # 将拆分后的_time列重命名为yr_time select(id, yr, yr_time) %>% # 保留需要的三列 arrange(id, yr) # 按id和年份排序,让结果更整洁
- 查看转换后的结果:
print(df_long)
代码说明:
cols = starts_with("yr"):指定要转换的列是所有以"yr"开头的列(即yr1、yr1_time、yr2、yr2_time、yr3、yr3_time)。names_pattern = "yr(\\d)(.*)":用正则表达式匹配变量名,捕获两个部分:第一部分是数字(1/2/3),第二部分是后缀(空或_time)。names_to = c("index", ".value"):将捕获的数字存入临时列index,后缀部分作为新列的名称(空对应yr列,_time对应_time列)。rename(yr_time =_time):把默认生成的_time列重命名为目标格式中的yr_time。
转换后的数据集就会呈现你需要的长格式,每个id对应多行记录,每行包含年份和对应的时长值。
内容的提问来源于stack exchange,提问作者llxx2021
相关产品推荐
相关产品推荐

