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

如何在R语言中重塑指定结构的DataFrame以得到目标格式?

R语言DataFrame重塑实现方法

先确认你的原始数据结构:

df <- structure(list(values = c("Man", "4", "AIT", "4"), Inputs = c("id_one", "idexp_one", "id_zero", "idexp_zero"), Comp = c("one", "one", "zero", "zero")), row.names = c(NA, 4L), class = "data.frame")

# 查看原始数据
df
#   values     Inputs Comp
# 1    Man     id_one  one
# 2      4  idexp_one  one
# 3    AIT    id_zero zero
# 4      4 idexp_zero zero

下面提供两种实现目标格式的方法:

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

这种方法逻辑直观,适合常规数据重塑场景:

library(tidyverse)

df_result <- df %>%
  # 从Inputs列前缀判断对应字段类型
  mutate(type = ifelse(startsWith(Inputs, "id_"), "name", "Exp")) %>%
  # 将长表转换为宽表
  pivot_wider(names_from = type, values_from = values) %>%
  # 调整列顺序匹配目标格式
  select(Comp, name, Exp)

# 查看最终结果
df_result
#   Comp name Exp
# 1  one  Man   4
# 2 zero  AIT   4

方法二:使用Base R(无需加载第三方包)

如果不想依赖外部工具,可以用原生R函数实现:

# 按Comp分组处理每个子集
result_list <- lapply(unique(df$Comp), function(comp_val) {
  group_data <- df[df$Comp == comp_val, ]
  # 匹配对应Inputs对应的values值
  name_val <- group_data$values[group_data$Inputs == paste0("id_", comp_val)]
  exp_val <- group_data$values[group_data$Inputs == paste0("idexp_", comp_val)]
  # 构造单行数据框
  data.frame(Comp = comp_val, name = name_val, Exp = exp_val, stringsAsFactors = FALSE)
})

# 合并所有分组结果
df_result <- do.call(rbind, result_list)

# 查看最终结果
df_result
#   Comp name Exp
# 1  one  Man   4
# 2 zero  AIT   4

内容的提问来源于stack exchange,提问作者manu p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:27:45