求助:将宽格式数据转换为长格式dataframe的方法
解决方案
要将宽格式数据转换为长格式,用tidyr包的pivot_longer()函数是最直接的方法,比单纯用dplyr分组更高效。以下是具体步骤:
1. 加载依赖包
首先确保安装并加载tidyverse(包含dplyr和tidyr):
install.packages("tidyverse") library(tidyverse)
2. 转换为长格式
假设你的原始数据框名为df,包含Sample列(分组标识)和多个带时间后缀的数值列(如Time1、Time2、Time3),执行以下代码:
df_long <- df %>% pivot_longer( cols = starts_with("Time"), # 选中所有以Time开头的列(可根据实际列名调整) names_to = "Time", # 原列名转为新的类别列名 values_to = "Value" # 原列中的数值存入新的数值列 )
可选:清洗Time列
如果需要把Time列的文字前缀去掉,只保留数字,添加mutate()处理:
df_long <- df %>% pivot_longer( cols = starts_with("Time"), names_to = "Time", values_to = "Value" ) %>% mutate(Time = parse_number(Time)) # 提取列名中的数字
自定义列选择
如果你的数值列不是以Time开头,可灵活调整cols参数:
- 排除
Sample列,转换其他所有列:cols = -Sample - 匹配带数字的列(如
T1、T2):cols = matches("T\\d+")
内容的提问来源于stack exchange,提问作者Elliot May
相关产品推荐
相关产品推荐

