我想枚举分组产生的数据框/小标题的每条记录。该索引是根据定义的顺序。如果我使用 row_number() 它会枚举但在组内。但我希望它在不考虑前分组的情况下枚举。
这是一个例子。为了简单起见,我使用了最小的数据框:
library(dplyr)
df0 <- data.frame( x1 = rep(LETTERS[1:2],each=2)
, x2 = rep(letters[1:2], 2)
, y = floor(abs(rnorm(4)*10))
)
df0
# x1 x2 y
# 1 A a 12
# 2 A b 24
# 3 B a 0
# 4 B b 12
现在,我将这张表分组:
df1 <- df0 %>% group_by(x1,x2) %>% summarize(y=sum(y))
这给了我一个类 tibble 的对象:
# A tibble: 4 x 3
# Groups: x1 [?]
# x1 x2 y
# <fct> <fct> <dbl>
# 1 A a 12
# 2 A b 24
# 3 B a 0
# 4 B b 12
我想使用 row_numer() 向该表添加行号:
df2 <- df1 %>% arrange(desc(y)) %>% mutate(index = row_number())
df2
# A tibble: 4 x 4
# Groups: x1 [2]
# x1 x2 y index
# <fct> <fct> <dbl> <int>
# 1 A b 24 1
# 2 A a 12 2
# 3 B b 12 1
# 4 B a 0 2
row_number() 确实在前一个分组中枚举。这不是我的本意。这可以避免先将 tibble 转换为数据框:
df2 <- df2 %>% as.data.frame() %>% arrange(desc(y)) %>% mutate(index = row_number())
df2
# x1 x2 y index
# 1 A b 24 1
# 2 A a 12 2
# 3 B b 12 3
# 4 B a 0 4
我的问题是:这种行为是有意的吗?如果是:将以前的数据处理合并到 tibble 中不是很危险吗?包含哪种类型的处理?目前我会将 tibble 转换为 dataframe 以避免这种意外结果。