使用group_by报错:‘list’类对象无适用的group_by_方法
解决最后一次
group_by的报错问题 首先看你的错误:no applicable method for 'group_by_' applied to an object of class "list",原因很明确——你最后一行代码里用了supply_agg(这是一个列表对象)来调用dplyr的group_by函数,但group_by只能处理数据框(data.frame/tibble)类型的对象,不能直接作用于列表。
你的代码问题点
看循环的最后一行:
supply_agg <- supply_agg %>% group_by(gg_mm, Regkol) %>% summarise_each(funs(sum()))
这里你把整个列表supply_agg当成了数据框来操作,自然会报错。而且从你的需求描述来看,你应该是想把循环生成的64个数据框先合并成一个完整的数据集,再按gg_mm和Regkol分组求和。
修正后的代码方案
我们可以调整代码逻辑:先完成循环内的单个数据处理,然后在循环外合并所有列表元素,最后执行分组求和:
# 初始化列表 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,后者已被弃用
额外的优化提示
summarise_each已经被dplyr弃用了,建议改用summarise(across(...))或者直接指定列求和,上面的修正里用了更简洁的summarise(value = sum(value))。- 如果你的
pivot_longer操作后,第三列确实不需要,可以在pivot_longer前用select提前筛选目标列,避免后续再用[,-3]调整。
内容的提问来源于stack exchange,提问作者Red_24




