在 R 中为每行创建一个分组指示器

Creating a grouping indicator per row in R

我有以下数据

x1 <- rnorm(20,0,1)
x2 <- rnorm(20,0,1)
group <- sample(50:55, size=20, replace=TRUE)
data <- data.frame(x1,x2,group)
head(data)

           x1          x2 group
1 -0.88001290  0.53866432    50
2  0.34228653 -0.54503078    52
3 -2.42308971  0.09542262    54
4  0.07310148 -1.03226594    50
5 -0.47786709  2.46726615    55
6  0.45224510 -1.46224926    55

我需要创建一个基于组变量的分组指标。 (这样 group=50 的行将等于 1,group=51 等于 2,依此类推)

我尝试使用 R 中的 dplyr 包来做到这一点。但是我没有得到正确的答案,因为我没有正确定义指示变量。

data %>% arrange(group) %>% group_by(group) %>%  mutate(Indicator = n() )

任何人都可以帮助我更正我的代码吗?

谢谢

我们需要 cur_group_id 而不是 n()n() - returns 该组的行数)

library(dplyr)
data %>% 
  arrange(group) %>%
  group_by(group) %>%
  mutate(indicator = cur_group_id()) %>%
  ungroup

-输出

# A tibble: 20 x 4
#        x1      x2 group indicator
#     <dbl>   <dbl> <int>     <int>
# 1 -1.24   -0.497     50         1
# 2 -0.648   1.59      50         1
# 3  0.598  -0.325     51         2
# 4 -0.721   0.510     51         2
# 5  0.259   1.62      51         2
# 6 -0.288   0.872     52         3
# 7  0.403   0.785     52         3
# 8  1.84    1.65      52         3
# 9  0.116  -0.0234    52         3
#10 -1.31   -0.244     52         3
#11 -0.615   0.994     53         4
#12 -0.469   0.695     53         4
#13 -0.324  -0.599     53         4
#14 -0.394  -0.971     53         4
#15  1.30    0.323     54         5
#16  0.0242 -1.46      54         5
#17 -0.342  -1.96      54         5
#18  1.10   -0.569     54         5
#19 -0.967  -0.863     54         5
#20 -0.396  -0.441     55         6

或者另一种选择是 match

data %>%
    mutate(indicator = match(group, sort(unique(group))))

dplyr::dense_rank 即使不分组也可能有帮助

data %>% mutate(indicator = dense_rank(group) )

baseR 方式

data$indicator <- as.numeric(as.factor(data$group))

data
             x1          x2 group indicator
1  -1.453628399 -1.78776319    55         6
2  -0.119413813 -0.07656982    52         3
3   0.387951296 -0.26845052    55         6
4   3.117977719  0.69280780    51         2
5  -0.938126762 -0.16898209    50         1
6  -1.596371818  0.35289797    52         3
7  -2.291376398 -1.59385221    55         6
8   0.161164263 -0.99387565    54         5
9  -0.281744752 -0.26801191    53         4
10  0.760719223 -0.28255900    50         1
11 -0.204073022 -1.10262114    51         2
12  0.653628314  0.77778039    54         5
13  0.043736298 -0.37896178    55         6
14  0.002800531  1.17034334    55         6
15  0.451136658 -0.38459588    51         2
16  0.151793862  0.60303631    55         6
17  0.173976519 -0.41745808    53         4
18  0.282827170 -0.16794851    52         3
19  0.737444975 -0.45712603    51         2
20  0.014182869  0.99013155    51         2

基础 R 使用 factor()

levels = 50:55
labels = 1:6
data$indicator <- factor(data$group, levels, labels)

levels = unique(data$group)
labels = seq_len(length(levels))
data$indicator <- factor(data$group, levels, labels)