You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用group_by报错:‘list’类对象无适用的group_by_方法

解决最后一次group_by的报错问题

首先看你的错误:no applicable method for 'group_by_' applied to an object of class "list",原因很明确——你最后一行代码里用了supply_agg(这是一个列表对象)来调用dplyrgroup_by函数,但group_by只能处理数据框(data.frame/tibble)类型的对象,不能直接作用于列表。

你的代码问题点

看循环的最后一行:

supply_agg <- supply_agg %>% group_by(gg_mm, Regkol) %>% summarise_each(funs(sum()))

这里你把整个列表supply_agg当成了数据框来操作,自然会报错。而且从你的需求描述来看,你应该是想把循环生成的64个数据框先合并成一个完整的数据集,再按gg_mmRegkol分组求和。

修正后的代码方案

我们可以调整代码逻辑:先完成循环内的单个数据处理,然后在循环外合并所有列表元素,最后执行分组求和:

# 初始化列表
supply_agg = vector(length = 64, mode = 'list')

# 循环处理每个i
for (i in 1:64) {
  supply_agg[[i]] <- PST[rownames(pct_kritiek),]*pct_kritiek[,i] *1000000
  supply_agg[[i]] <- cbind("gg_omschrijving" = rownames(supply_agg[[i]]), supply_agg[[i]])
  supply_agg[[i]] <- inner_join(koppelGG, supply_agg[[i]], by= "gg_omschrijving")
  supply_agg[[i]] <- supply_agg[[i]][,-1]
  supply_agg[[i]] <- supply_agg[[i]] %>% group_by(gg_mm) %>% summarise_each(funs(sum))
  colnames(supply_agg[[i]]) <- koppelRK[1,]
  supply_agg[[i]]<- pivot_longer(supply_agg[[i]], col= "Landbouw, bosbouw en visserij":"Milieu",names_to = "Regkol", values_to = "value")
  supply_agg[[i]]<- supply_agg[[i]][,-3]
}

# 循环结束后:合并所有列表中的数据框
supply_agg_combined <- bind_rows(supply_agg)

# 执行最终的分组求和
supply_final <- supply_agg_combined %>% 
  group_by(gg_mm, Regkol) %>% 
  summarise(value = sum(value), .groups = "drop") # 用summarise代替summarise_each,后者已被弃用

额外的优化提示

  1. summarise_each已经被dplyr弃用了,建议改用summarise(across(...))或者直接指定列求和,上面的修正里用了更简洁的summarise(value = sum(value))
  2. 如果你的pivot_longer操作后,第三列确实不需要,可以在pivot_longer前用select提前筛选目标列,避免后续再用[,-3]调整。

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

火山引擎 最新活动