【问题标题】:Error in UseMethod("group_by_") : no applicable method for 'group_by_' applied to an object of class "list"UseMethod(“group_by_”)中的错误:没有适用于“group_by_”的方法应用于“list”类的对象
【发布时间】:2019-08-21 18:09:16
【问题描述】:

如何为数据框列表中的每个数据框分组数据框的列并应用 group_by() 和 summarise()?

目前出现如标题所示的错误。这是我所拥有的:

我想group_by() 然后summarise() 在这里尝试:

trial <- dataset %>% group_by(Year) %>% summarise(Mean_Max_Temp = mean(Max.Temp), Mean_Min_Temp = mean(Min.temp)
+                                                             ,Monthly_Precip = sum(Precipitation))

UseMethod("group_by_") 中的错误: 没有适用于“group_by_”的方法应用于“list”类的对象

【问题讨论】:

  • 看起来dataset 是数据框列表,而不是数据框。 See here 提出人们可以帮助解决的 R 问题,包括数据样本。
  • 因为数据集包含列表,而这些列表包含年份,所以你应该将它应用到数据集中的列表中
  • @Chelmy88 怎么样?请详细说明
  • 还有@camille - 你认为将它保存为列表列表还是 R 中的多个数据框更好,然后可以用来运行整洁的函数?
  • 例如trial &lt;- dataset[["data_10.25_76.75"]] %&gt;% ..

标签: r list tidyverse


【解决方案1】:

由于数据框看起来都具有相同的结构,您可以将它们绑定到一个,然后也可以按 ID 变量分组。我猜您的列表名称只是收集气象数据的经度和纬度,所以这应该不是问题。

dataset %>% 
  bind_rows(.id = "location") %>% 
  group_by(frame_name, year) %>% 
  summarize(Mean_Max_Temp = mean(Max.Temp), Mean_Min_Temp = mean(Min.temp), 
            Monthly_Precip = sum(Precipitation))

或者,您可以使用map() 将相同的函数应用于列表的每个元素。

dataset %>% 
  map(~summarise(group_by(., Year),
                 Mean_Max_Temp = mean(Max.Temp), 
                 Mean_Min_Temp = mean(Min.temp),
                 Monthly_Precip = sum(Precipitation)))

【讨论】:

  • 谢谢! location 这里是什么?
  • 它是根据列表元素的名称创建的 ID 变量。你可以随心所欲地称呼它。我之所以这么称呼它是因为我认为这些是您列表名称中的坐标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 2023-01-22
  • 1970-01-01
  • 2019-09-23
  • 2019-09-12
  • 2022-12-15
相关资源
最近更新 更多