如何在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
相关产品推荐
相关产品推荐

