【问题标题】:Problem with `summarise()` input `Illinois` in RR中的`summarise()`输入`Illinois`的问题
【发布时间】:2020-12-09 02:37:56
【问题描述】:

为学校做一项作业,我们使用来自 dplyr 的预加载数据框(中西部)来操作数据并通过闪亮显示可视化。

我收到错误“'summarise()' 输入 'Illinois' 的问题,因为“找不到对象 'IL'(即使那是我认为分组依据的列中的一个变量。

这是我目前的一些代码。

bar_chart <- function(midwest) {
data_summary <- midwest %>%
  dplyr::group_by(state) %>%
  summarize("Illinois" = mean(IL, na.rm = TRUE),
            "Minnesota" = mean(MN, na.rm = TRUE),
            "Indiana" = mean(IN, na.rm = TRUE),
            "Ohio" = mean(OH, na.rm = TRUE),
            "Wisconsin" = mean(WN, na.rm = TRUE))

【问题讨论】:

  • 如果您按“状态”分组,则称为“状态”的列,而不是“IL”。您需要使用列名,而不是 summarize() 中的值。如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。 midwest 对象到底是什么?
  • 你所拥有的并没有什么意义,你需要传递summarize 列名,而不是列中的因子级别。例如midwest %&gt;% group_by(state) %&gt;% summarize(poptotal = mean(poptotal))
  • 欢迎堆栈溢出!正如@MrFlick 所指出的,请尝试始终发布reproducible example。这样你的问题就会得到更好的答案。

标签: r dplyr


【解决方案1】:

这里有几件事要理解。组指定聚合级别,在本例中为 state。这意味着当我们summarize 时,我们会汇总到指定的聚合级别。我们有一个包含多个状态的数据集,所以当我们按state 分组时,这意味着我们最终会为每个状态保留一行。结果是您不必像在提供的示例中那样为每个状态编写一行代码。

当我们总结时,我们需要指定一个用于总结(即汇总)数据的函数,以及一个应用它的列。在这种情况下,您使用的是mean,所以我也会使用它,我们会为每个州找到poptotalmean

最后,虽然您可以使用 recode 替换因子水平,但我下面的小示例使用 left_join 和 R 内置的州名称和缩写表来添加它 - 如果您拥有全部 50 个,这是一个不错的小技巧州。

library(tidyverse)
data(midwest)

stateTable <-  data.frame(state.abb, state.name)

midwest %>% group_by(state) %>% 
  summarize(poptotal = mean(poptotal)) %>% 
  left_join(. , stateTable, by = c( "state" = "state.abb"))

# A tibble: 5 x 3
  state poptotal state.name
  <chr>    <dbl> <fct>     
1 IL     112065. Illinois  
2 IN      60263. Indiana   
3 MI     111992. Michigan  
4 OH     123263. Ohio      
5 WI      67941. Wisconsin 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2018-04-30
    相关资源
    最近更新 更多