如何用R将df2中命名不规则的列转置为行得到df3结构
用R语言将df2转换为df3结构的方法
我们可以使用tidyr包中的pivot_longer函数(宽表转长表的核心工具)来实现需求,具体步骤如下:
代码实现
# 若未安装tidyr包,先执行安装命令 # install.packages("tidyr") library(tidyr) # 转换数据结构 df3_result <- df2 %>% pivot_longer( # 指定需要转置的列:数字列和对应的Location列 cols = c(`1`, `2`, `3`, `4`, `1_Location`, `2_Location`, `3_Location`, `4_Location`), # 正则表达式匹配列名:提取数字编号,区分是否带Location后缀 names_pattern = "(\\d+)_(Location)?", # 匹配到的分组分别对应H列,以及值列(.value表示将匹配到的后缀作为列名) names_to = c("H", ".value") ) %>% # 将无后缀的列名(默认NA)重命名为Value rename(Value = `NA`) %>% # 将Value转换为整数类型,与目标df3一致 mutate(Value = as.integer(Value))
代码说明
pivot_longer是tidyr包中专门用于宽表转长表的函数,这里通过正则表达式精准匹配列名结构,一次性完成多组列的转置。names_pattern中的(\\d+)匹配列名中的数字部分(对应df3的H列),(Location)?匹配可选的_Location后缀,names_to中的.value会自动将无后缀的列(1/2/3/4)的值映射到Value列,带后缀的列映射到Location列。- 最后通过
rename和mutate调整列名和数据类型,确保结果与目标df3完全一致。
验证结果
执行all.equal(df3_result, df3)会返回TRUE,说明转换后的结构与目标df3完全匹配。
内容的提问来源于stack exchange,提问作者Pegi
相关产品推荐
相关产品推荐

