首页 > 解决方案 > group_by 无法正常工作,仅选择了部分变量进行分组

问题描述

我正在尝试计算特定变量的变化率gstatus,但group_by仅在我的 ID 变量中间选择三个字符RAUMID进行分组。这是我的数据框的简短示例:

> head(df_long, 20)
    RAUMID gcode       tg1      tg2      tg3      tg4      tg5 is_eg F_IN_KRAFT.x Year gstatus
1  1011101     4  8.000000 4.000000 1.998631 0.000000 0.000000     0            0 2003       0
2  1011102     3  1.998631 4.000000 0.000000 0.000000 0.000000     0            0 2003       0
3  1011103     3  9.998631 2.001369 0.000000 0.000000 0.000000     1         2019 2003       0
4  1011104     5  4.000000 4.000000 4.000000 1.998631 1.002053     0            0 2003       0
5  1011105     3  1.998631 4.000000 0.000000 0.000000 0.000000     0            0 2003       0
6  1011201     4  4.000000 4.000000 1.998631 0.000000 0.000000     0            0 2003       0
7  1011202     3  4.000000 4.000000 0.000000 0.000000 0.000000     0            0 2003       0
8  1011203     3  1.998631 6.001369 0.000000 0.000000 0.000000     0            0 2003       0
9  1011204     4  4.000000 4.000000 1.998631 0.000000 0.000000     0            0 2003       0
10 1011301     3  9.998631 2.001369 0.000000 0.000000 0.000000     0            0 2003       0
11 1011302     1  0.000000 0.000000 0.000000 0.000000 0.000000     0            0 2003       0
12 1011303     1  0.000000 0.000000 0.000000 0.000000 0.000000     1         2019 2003       0
13 1011304     4  4.000000 6.001369 5.998631 0.000000 0.000000     0            0 2003       1
14 1011305     5  8.000000 2.001369 1.998631 2.001369 3.000684     0            0 2003       1
15 1011306     4  4.000000 6.001369 4.000000 0.000000 0.000000     0            0 2003       1
16 1011401     4  1.998631 4.000000 4.000000 0.000000 0.000000     0            0 2003       0
17 1011402     3  5.998631 2.001369 0.000000 0.000000 0.000000     0            0 2003       0
18 1022101     3  4.000000 6.001369 0.000000 0.000000 0.000000     0            0 2003       1
19 1022102     4  4.000000 6.001369 1.998631 0.000000 0.000000     0            0 2003       1
20 1022103     2 10.001369 0.000000 0.000000 0.000000 0.000000     0            0 2003       1

当我尝试使用时会发生以下情况dplyr::group_by()

> df_long %>% group_by(RAUMID)
# A tibble: 4,023 x 11
# Groups:   RAUMID [447]
    RAUMID gcode   tg1   tg2   tg3   tg4   tg5 is_eg F_IN_KRAFT.x  Year gstatus
     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>        <dbl> <dbl>   <dbl>
 1 1011101     4  8     4     2.00  0     0        0            0  2003       0
 2 1011102     3  2.00  4     0     0     0        0            0  2003       0
 3 1011103     3 10.0   2.00  0     0     0        1         2019  2003       0
 4 1011104     5  4     4     4     2.00  1.00     0            0  2003       0
 5 1011105     3  2.00  4     0     0     0        0            0  2003       0
 6 1011201     4  4     4     2.00  0     0        0            0  2003       0
 7 1011202     3  4     4     0     0     0        0            0  2003       0
 8 1011203     3  2.00  6.00  0     0     0        0            0  2003       0
 9 1011204     4  4     4     2.00  0     0        0            0  2003       0
10 1011301     3 10.0   2.00  0     0     0        0            0  2003       0
# … with 4,013 more rows

虽然没有在复制粘贴中显示,但数字 2-4 在我的控制台中带有下划线。此外,该行属于 class factor,有趣的是,在 中View(df_long),我能够订购该行RAUMID并且它已成功分组。

编辑:需要明确的是,我知道数据没有正确分组,因为我上面所说的关于查看的内容,并且因为使用test <- df_long[order(df_long$RAUMID),],它可以正常工作。

> head(test)
      RAUMID gcode tg1 tg2      tg3 tg4 tg5 is_eg F_IN_KRAFT.x Year gstatus
1    1011101     4   8   4 1.998631   0   0     0            0 2003       0
448  1011101     4   8   4 1.998631   0   0     0            0 2005       1
895  1011101     4   8   4 1.998631   0   0     0            0 2007       1
1342 1011101     4   8   4 1.998631   0   0     0            0 2009       1
1789 1011101     4   8   4 1.998631   0   0     0            0 2011       1
2236 1011101     4   8   4 1.998631   0   0     0            0 2013       2

标签: rdataframedplyr

解决方案


推荐阅读