r - 索引 grouped_df 对象

标签 r dplyr

尝试选择类 grouped_df 的对象的列按索引给出“错误:索引越界”。例如

x <- mtcars %>% group_by(am, gear) %>% summarise_each(funs(sum), disp, hp, drat)
class(x)
#    "grouped_df" "tbl_df"     "tbl"        "data.frame"
# For some reason the first column can be selected...
x[1]
#    Source: local data frame [4 x 1]
#    Groups: am
#    am
#     0
#     0
#     1
#     1    
# ...but any index > 1 fails
x[2] 
#   Error: index out of bounds
# Coercing to data frame does the trick...
as.data.frame(x)[2]
#   gear
#      3
#      4
#      4
#      5
#... and so does ungrouping
all(ungroup(x)[2] == as.data.frame(x)[2]) # TRUE

这是使用 R 版本 3.1.1 和 dplyr 0.3.0.2。我不确定这是一个错误还是故意的..它以这种方式工作有什么好的理由吗?我宁愿不必记住在使用 dplyr 后取消组合我的数据框每次...

更新 更深入地研究这一点后,我的猜测是定义 [.grouped_df 的动机。 this way用于在调用时保留组,例如x[1:3] (有效)。但是,当索引不是分组变量的一部分时,就会抛出上面的错误。也许可以修改它,以便在这种情况下它调用 [.tbl_df并同时发出警告......

更新 2 [.grouped_df已在 dplyr (0.3.0.9000) 的开发版本中进行了修改。它仍然会抛出一个错误,但现在更清楚了,指定不包括哪些分组变量。
x[2]
# Error in `[.grouped_df`(x, 2) : 
#     cannot group, grouping variables 'am' not included

我找到的最好的解决方案是在这种情况下我的代码不会崩溃,包括 %>% ungroupdplyr命令链。

最佳答案

对于 group_by , 函数 [除了分组变量之外,不能对 df 的列进行子集化。查看详情 issuse ,

关于r - 索引 grouped_df 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26342991/

相关文章:

r - 在 R 中创建热图?

r - R 中新客户和回头客的数量

r - mutate_at 用于包含空格的列名

r - 使用其他列中的值跨多个列进行条件变异 - 在 tidyverse 中寻找有效的解决方案

r - 编写在 dplyr::mutate() 内部工作的自定义函数

r - 如何设置条件以在 Shiny 的应用程序中显示日期范围

r - 如何使用大文件防止 R 循环中的内存问题?

r - ggplot2 - 向分组条形图添加差异

r - R中的Uniroot解决方案

相当于 R groupby 变异的 Python pandas