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

R语言如何为split生成的tibble列表批量计算周度温度统计值

解决方案

最优方案:无需拆分数据框,直接分组统计

直接对原始数据框同时按plotid和周度分组,一步完成所有地块的统计,完全不需要拆分列表:

library(tidyverse)
library(lubridate) # floor_date函数需要依赖该包

all_weekly_stat <- dfall1 %>%
  group_by(plotid, Week = floor_date(time1-4, unit="week")) %>% 
  summarize(
    weeklyAvsoilT=mean(pinTemp,na.rm=T),
    weeklyminsoilT=min(pinTemp,na.rm=T),
    weeklymaxsoilT=max(pinTemp,na.rm=T),
    weeklyAvsurfT=mean(surfaceTemp,na.rm=T),
    weeklyminsurfT=min(surfaceTemp,na.rm=T),
    weeklymaxsurfT=max(surfaceTemp,na.rm=T),
    weeklyAvairT=mean(airTemp,na.rm=T),
    weeklyminairT=min(airTemp,na.rm=T),
    weeklymaxairT=max(airTemp,na.rm=T), 
    min_date = min(time1), 
    max_date = max(time1)
  ) %>% 
  mutate(
    min_weekday = weekdays(min_date), 
    max_weekday = weekdays(max_date)
  )

运行后直接得到包含所有27个plotid周度统计结果的完整tibble,无需后续合并。

如果你需要保留拆分列表的处理逻辑

方案1:基础R lapply 实现

将统计逻辑封装为匿名函数传入lapply,批量处理列表内每个子tibble:

# 批量计算每个子tibble的周度统计
stat_list <- lapply(names(new), function(pid) {
  new[[pid]] %>% 
    group_by(Week = floor_date(time1-4, unit="week")) %>% 
    summarize(
      weeklyAvsoilT=mean(pinTemp,na.rm=T),
      weeklyminsoilT=min(pinTemp,na.rm=T),
      weeklymaxsoilT=max(pinTemp,na.rm=T),
      weeklyAvsurfT=mean(surfaceTemp,na.rm=T),
      weeklyminsurfT=min(surfaceTemp,na.rm=T),
      weeklymaxsurfT=max(surfaceTemp,na.rm=T),
      weeklyAvairT=mean(airTemp,na.rm=T),
      weeklyminairT=min(airTemp,na.rm=T),
      weeklymaxairT=max(airTemp,na.rm=T), 
      min_date = min(time1), 
      max_date = max(time1)
    ) %>% 
    mutate(
      plotid = pid, # 加入plotid标识对应原始分组
      min_weekday = weekdays(min_date), 
      max_weekday = weekdays(max_date)
    )
})

# 可选操作:把所有子结果合并为一个大tibble
all_stat <- do.call(rbind, stat_list)

方案2:tidyverse生态 purrr::imap 实现

语法更简洁,自动获取列表元素名作为plotid:

library(purrr)

stat_list <- imap(new, function(df, pid) {
  df %>% 
    group_by(Week = floor_date(time1-4, unit="week")) %>% 
    summarize(
      weeklyAvsoilT=mean(pinTemp,na.rm=T),
      weeklyminsoilT=min(pinTemp,na.rm=T),
      weeklymaxsoilT=max(pinTemp,na.rm=T),
      weeklyAvsurfT=mean(surfaceTemp,na.rm=T),
      weeklyminsurfT=min(surfaceTemp,na.rm=T),
      weeklymaxsurfT=max(surfaceTemp,na.rm=T),
      weeklyAvairT=mean(airTemp,na.rm=T),
      weeklyminairT=min(airTemp,na.rm=T),
      weeklymaxairT=max(airTemp,na.rm=T), 
      min_date = min(time1), 
      max_date = max(time1)
    ) %>% 
    mutate(
      plotid = pid,
      min_weekday = weekdays(min_date), 
      max_weekday = weekdays(max_date)
    )
})

# 可选操作:合并为全量tibble
all_stat <- list_rbind(stat_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:03