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

R语言:如何按列唯一值拆分DataFrame,处理后合并?

按Category批量拆分、处理并合并DataFrame的自动化实现

先修正示例函数

你提供的divide函数存在变量作用域问题,直接引用Sales会找不到对象,需要明确指向子DataFrame的列,修正后的函数如下:

divide <- function(df) {
  df$Sales <- (df$Sales - 32) * 5 / 9
  return(df)
}

如果习惯用dplyr风格,也可以写成:

divide <- function(df) {
  df %>% mutate(Sales = (Sales - 32) * 5 / 9)
}

方法一:基础R实现(无需额外包)

通过unique()获取类别唯一值,循环处理后合并:

# 获取Category列的所有唯一值
unique_categories <- unique(data$Category)

# 创建空列表存储处理后的子数据集
processed_dfs <- list()

# 遍历每个类别,拆分、处理、存入列表
for (cat in unique_categories) {
  # 拆分当前类别的子DataFrame
  sub_df <- subset(data, Category == cat)
  # 应用自定义处理函数
  processed_sub <- divide(sub_df)
  # 将处理后的结果加入列表
  processed_dfs[[cat]] <- processed_sub
}

# 合并所有处理后的子DataFrame
final_result <- do.call(rbind, processed_dfs)

方法二:dplyr + purrr 实现(更简洁)

利用tidyverse工具链的函数,代码更简洁易读:

library(dplyr)
library(purrr)

# 一步完成拆分、批量处理、合并
final_result <- data %>%
  group_split(Category) %>%  # 按Category拆分为子DataFrame列表
  map(divide) %>%            # 对每个子DataFrame应用处理函数
  bind_rows()                # 合并所有子数据集

关键说明

  • 两种方法都能自动完成拆分-处理-合并的全流程,无需手动逐个处理类别
  • 如果你的自定义处理函数需要额外参数,可在for循环或map()中传递(比如map(divide, extra_param = 10))
  • 处理后的结果会保留原数据的所有列,仅按函数逻辑修改目标列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:39:52