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

如何将R语言DataFrame中同前缀行的数值转换为对应列?

R语言DataFrame结构转换方案

要实现将带有前缀的行名转换为列、对应数值按序号排列的需求,以下是两种实用方法:

方法一:使用tidyverse工具链(dplyr + tidyr)

这种方式逻辑清晰,代码可读性强,适合日常数据处理:

library(dplyr)
library(tidyr)

# 原始数据
df <- data.frame(row_name = c("sha1", "sha2", "edt1", "edt2", "perform1", "perform2"),
                 value = c(10, 20, 30, 40, 50, 60))

# 执行转换
df_new <- df %>%
  # 从row_name中拆分出前缀(非数字部分)和序号(数字部分)
  mutate(
    prefix = sub("(\\D+)(\\d+)", "\\1", row_name),
    id = as.integer(sub("(\\D+)(\\d+)", "\\2", row_name))
  ) %>%
  # 长格式转宽格式,将前缀作为列名
  pivot_wider(names_from = prefix, values_from = value) %>%
  # 移除不需要的id列
  select(-id)

# 输出结果
print(df_new)

运行后输出:

sha edt perform
1  10  30      50
2  20  40      60

方法二:基础R原生实现

如果不想依赖第三方包,可使用基础R函数完成转换:

# 原始数据
df <- data.frame(row_name = c("sha1", "sha2", "edt1", "edt2", "perform1", "perform2"),
                 value = c(10, 20, 30, 40, 50, 60))

# 提取前缀和序号
prefixes <- sub("\\d+$", "", df$row_name)
ids <- as.integer(sub("^\\D+", "", df$row_name))

# 按前缀分组,按序号排序后提取数值
grouped_data <- tapply(df$value, prefixes, function(x) {
  x[order(ids[prefixes == unique(prefixes)])]
})

# 转换为目标DataFrame
df_new <- as.data.frame(do.call(cbind, grouped_data))

# 输出结果
print(df_new)

此方法同样能得到与目标一致的DataFrame结构。

内容的提问来源于stack exchange,提问作者Erik Brole

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:23:13