尝试选择类 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
我找到的最好的解决方案是在这种情况下我的代码不会崩溃,包括
%>% ungroup
末dplyr
命令链。
最佳答案
对于 group_by
, 函数 [
除了分组变量之外,不能对 df 的列进行子集化。查看详情 issuse ,
关于r - 索引 grouped_df 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26342991/