【问题标题】:R : doesn't recognise column in a new tableR:不识别新表中的列
【发布时间】:2019-11-24 15:10:34
【问题描述】:

这是我正在做的在线课程的一部分,R 用于数据分析。

使用 group_by 和 summarise 函数在 diamonds 数据集上创建一个 tibble - 新的 tibble 确实存在并且看起来如您所料,我检查了。现在必须使用新 tibble 中的这些汇总值创建条形图,但它给了我各种与无法识别列相关的错误。 我将小标题转换为数据框,但仍然遇到同样的问题。

代码如下:

diamonds_by_color <- group_by(diamonds, color)
diamonds_mp_by_color <- summarise(diamonds_by_color, mean_price = mean(price))
diamonds_mp_by_color <- as.data.frame(diamonds_mp_by_color)
colorcounts <- count(diamonds_by_color$mean_price)
colorbarplot <- barplot(diamonds_by_color$mean_price, names.arg = diamonds_by_color$color, 
                           main = "Average price for different colour diamonds")

我在运行函数计数时得到的错误是:

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

另外:警告信息: 未知或未初始化的列:“mean_price”。

这可能是一些微不足道的事情,但我已经阅读了很多书并尝试了一些东西但无法弄清楚。任何帮助将不胜感激:)

【问题讨论】:

  • 我认为你不需要第三行代码。 'count' 也需要一个 df 和一个列。计数(df,col)。最好不要分配
  • diamonds_by_color 从来没有分配给它mean_price ...它是从该帧计算出来的,然后分配给diamonds_mp_by_color
  • 第2行的输出是一个数据框,不需要在第3行做成数据框...
  • Isquare1,如果其中一个答案解决了您的问题,请accept it;这样做不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些关闭。尽管您只能接受一个答案,但您可以选择对您认为有帮助的人进行投票。 (如果仍有问题,您可能需要编辑您的问题并提供更多详细信息。)

标签: r dplyr


【解决方案1】:

您的diamonds_by_color 从来没有分配给它mean_price

如果您改为引用 diamonds_mp_by_color,则最后两行代码有效:

colorcounts <- count(diamonds_mp_by_color, mean_price)
barplot(diamonds_mp_by_color$mean_price,
        names.arg=diamonds_mp_by_color$color,
        main="Average price for different colour diamonds")

【讨论】:

  • 作为记录,Isquare1,我同意@smci's assertion 的说法,更惯用的方法是使用动词函数管道,ala %&gt;%。当然,这是风格,但它是“tidyverse 规范”。
【解决方案2】:

这是一种使用dplyr 按颜色汇总价格并使用ggplot2 直接传递到条形图的方法。

diamonds %>% group_by(color) %>% 
  summarise(mean.price=mean(price,na.rm=1)) %>% 
  ggplot(aes(color,mean.price)) + geom_bar(stat='identity')

【讨论】:

    【解决方案3】:

    最好的 dplyr 习惯用法是不要为每个操作声明一个临时结果。只做一根大管子; %&gt;% 符号也更清晰,因为您不必在每个操作中一直指定哪个数据帧作为第一个参数:

    diamonds %>%
        group_by(color) %>%
        summarise(mean_price = mean(price)) %>%
        tally() %>% # equivalent to n() on a group
        # may need ungroup() %>%
        barplot(mean_price, names.arg = color, 
            main = "Average price for different colour diamonds")
    

    (类似的东西。如果愿意,您可以在条形图之前分配管道的输出。我正在通过机场过境,所以我无法在 R 中检查它。)

    【讨论】:

    • 如果您在谈论成语(我同意鼓励管道传输),那么此代码很容易在控制台上使用Error: unexpected SPECIAL in " %&gt;%" 失败。通常首选将%&gt;% 管道 一个命令之后,而不是在行前。虽然对于某些应用程序来说,它可能主要是样式,但我认为让代码在脚本中工作而不是在控制台中工作是脆弱的。
    猜你喜欢
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多