You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:53:12