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

按ID重新调整列表层级:跨列表元素分组整合数据

解决方案

针对你需要将多个结构不同的Data Frame按ID重新组织、整合数据并应用自定义函数的需求,这里提供两种实用方法:

方法一:合并后按ID分组(适合统一汇总场景)

先给列表元素命名,为每个Data Frame添加来源标识,合并后按ID分组,再应用自定义函数。

步骤代码:

  1. 给列表命名,明确每个元素的来源:
names(food) <- c("fruit", "veg", "milk")
  1. 添加来源列并合并所有Data Frame:
library(dplyr)
library(purrr)

# 为每个df添加source列,然后合并成大df
combined_df <- imap_dfr(food, ~ mutate(.x, source = .y))

# 按id分组
grouped_data <- group_by(combined_df, id)
  1. 定义并应用自定义汇总函数:
    比如计算每个ID的总消费、各来源记录数:
custom_summary <- function(group) {
  tibble(
    id = unique(group$id),
    total_consumed = sum(group$consumed, na.rm = TRUE),
    fruit_count = sum(group$source == "fruit"),
    veg_count = sum(group$source == "veg"),
    milk_count = sum(group$source == "milk")
  )
}

# 生成汇总结果
summary_output <- grouped_data %>% group_modify(custom_summary)

方法二:按ID拆分列表(适合精细化处理场景)

直接将每个Data Frame按ID拆分,再整合同一ID下的所有来源数据,形成以ID为层级的结构,方便逐个处理。

步骤代码:

  1. 按ID拆分每个Data Frame:
# 把每个df拆成以id为键的子列表
split_list <- map(food, ~ split(.x, .x$id))
  1. 整合同一ID的多来源数据:
# 生成以id为名称的列表,每个元素对应该id的所有数据(带source标识)
id_merged_list <- map(names(split_list[[1]]), function(id_val) {
  map_dfr(split_list, ~ .x[[id_val]], .id = "source")
})
names(id_merged_list) <- names(split_list[[1]])
  1. 对每个ID的数据应用自定义函数:
    比如计算各来源的消费均值:
process_single_id <- function(data) {
  data %>%
    group_by(source) %>%
    summarise(avg_consumed = mean(consumed, na.rm = TRUE))
}

# 批量处理所有ID
all_id_results <- map(id_merged_list, process_single_id)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:07:42