【问题标题】:dplyr object not found error [closed]找不到dplyr对象错误[关闭]
【发布时间】:2016-08-19 17:47:08
【问题描述】:

我不太确定为什么这段代码不起作用。

我的数据如下所示:

head(test)
  Fiscal.Year Fiscal.Quarter   Seller Product.Revenue Product.Quantity Product.Family Sales.Level.1          Group Fiscal.Week
1        2015         2015Q3 ABCD1234            4000                4      Paper cup      Americas Paper Division          32
2        2014         2014Q1  DDH1234             300                5   Paper tissue  Asia Pacific Paper Division          33
3        2015         2015Q1  PNS1234             298                6         Spoons          EMEA        Cutlery          34
4        2016         2016Q4  CCC1234             289                7         Knives        Africa        Cutlery          33

现在,我的目标是按年份汇总收入。

这是我写的 dplyr 代码:

test %>% 
  group_by(Fiscal.Year) %>%
  select(Seller,Product.Family,Fiscal.Year) %>%
  summarise(Rev1 = sum(Product.Revenue)) %>%
  arrange(Fiscal.Year)

这不起作用。我得到了错误:

Error: object 'Product.Revenue' not found

但是,当我摆脱 select 语句时,它可以工作,但是我看不到卖家和产品系列的输出。

test %>% 
  group_by(Fiscal.Year) %>%
 # select(Seller,Product.Family,Fiscal.Year) %>%
  summarise(Rev1 = sum(Product.Revenue)) %>%
  arrange(Fiscal.Year)

输出是:

# A tibble: 3 x 2
  Fiscal.Year  Rev1
        <dbl> <dbl>
1        2014   300
2        2015  4298
3        2016   289

这很好用。

知道发生了什么吗?自从我开始用 R 编程已经过去了大约 3 周。所以,我很感激你的想法。我正在关注本指南:https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html

另外,我在 SO 上查看了类似的主题,但我相信它们与问题有关,因为“+”号:Error in dplyr group_by function, object not found

我正在寻找以下输出:

  Fiscal.Year  Rev1 Product Family Seller
        <dbl> <dbl> ...             ...
1        2014   ...
2        2015   ... 
3        2016   ...

非常感谢

【问题讨论】:

  • 您在select 通话中特别省略了它。也许您应该改用select(Seller,Product.Family,Fiscal.Year,Product.Revenue)
  • 发布上述查询后,我认为问题在于“选择”中的列是分类的。所以, dplyr 不知道如何对它们求和。如果这是真的,我如何显示这些列(即与项目对应的值)?有什么想法吗?
  • select 只是选择保留哪些列,因此在您当前调用select 之后,数据只有三列(不是Product.Revenue)。没什么特别的,你的电话类似于test[, c("Seller","Product.Family","Fiscal.Year")](尽管分组)。
  • 不要忘记您可以一次运行一行代码并确保它看起来正确。这是一种非常简单且非常好的调试技术。我很确定如果您只运行前几行 test %&gt;% group_by(Fiscal.Year) %&gt;% select(Seller,Product.Family,Fiscal.Year),您可以查看该输出并认为“嘿,在 select 之后没有 Product.Revenue 列。难怪我收到错误消息说找不到该列”。
  • 您的示例看起来无法重现,并且您自己以代码的形式解决了它,没有任何解释,所以它看起来对其他人没有多大用处。我建议编辑以清理它并使此问答成为有用的参考,或将其删除。

标签: r dplyr


【解决方案1】:

好的。这成功了:

test %>% 
  group_by(Fiscal.Year, Seller,Product.Family) %>%
  summarise(Rev1 = sum(Product.Revenue)) %>%
  arrange(Fiscal.Year)

输出:

Source: local data frame [4 x 4]
Groups: Fiscal.Year, Seller [4]

  Fiscal.Year   Seller Product.Family  Rev1
        <dbl>    <chr>          <chr> <dbl>
1        2014  DDH1234   Paper tissue   300
2        2015 ABCD1234      Paper cup  4000
3        2015  PNS1234         Spoons   298
4        2016  CCC1234         Knives   289

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2018-06-03
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多