【发布时间】: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 %>% group_by(Fiscal.Year) %>% select(Seller,Product.Family,Fiscal.Year),您可以查看该输出并认为“嘿,在select之后没有Product.Revenue列。难怪我收到错误消息说找不到该列”。 -
您的示例看起来无法重现,并且您自己以代码的形式解决了它,没有任何解释,所以它看起来对其他人没有多大用处。我建议编辑以清理它并使此问答成为有用的参考,或将其删除。