如何使用dplyr :: group_by为数据框的每个组赋予数字?

Mer*_*glu 1 functional-programming group-by r dplyr

我想给数据框中的每个组数字。例如,我有以下数据框:

df = data.frame( from = c('a', 'a', 'b'), dest = c('b', 'c', 'd') )
#> df
    #from dest
#1    a    b
#2    a    c
#3    b    d
Run Code Online (Sandbox Code Playgroud)

我想按from值分组,并给每个组一个组号。这是预期的结果:

result = data.frame( from = c('a', 'a', 'b'), dest = c('b', 'c', 'd'), group_no = c(1,1,2) )
#> result
    #from dest group_no
#1    a    b        1
#2    a    c        1
#3    b    d        2
Run Code Online (Sandbox Code Playgroud)

我可以使用以下for循环解决此问题:

groups = df$from %>% unique
i = 0
df$group_no = NA
for ( g in groups ) {
    i = i + 1
    df[ df$from == g, ]$group_no = i
}
#> df
    #from dest group_no
#1    a    b        1
#2    a    c        1
#3    b    d        2
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以在不使用for循环的情况下以更优雅,更实用的方式解决此问题?具体来说,我想知道是否可以使用dplyr::group_by函数来完成?

ali*_*ire 6

使用mutate添加一列这是只是一个数字形式from的一个因素:

df %>% mutate(group_no = as.integer(factor(from)))

#   from dest group_no
# 1    a    b        1
# 2    a    c        1
# 3    b    d        2
Run Code Online (Sandbox Code Playgroud)

...要不就

mutate(df, group_no = as.integer(factor(from)))
Run Code Online (Sandbox Code Playgroud)

group_by在这里不需要注释,除非您将其用于其他目的。如果要按新列分组以便以后使用,可以使用group_by而不是mutate添加列。