R语言 基于其他列的每组唯一ID [重复]

ars1skjm  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(156)
    • 此问题在此处已有答案**:

Numbering rows within groups in a data frame(10个答案)
R data frame rank by groups (group by rank) with package dplyr(3个答案)
23小时前关门了。
我正在使用R编程语言。
我有以下数据集:

id = c(1,2,3,4,5,6)
group_1 = c("a", "a", "b", "b", "b", "b")
var_1 = c(12,32,14,17,14,18)
my_data = data.frame(id, group_1, var_1)

 id group_1 var_1
1  1       a    12
2  2       a    32
3  3       b    14
4  4       b    17
5  5       b    14
6  6       b    18
    • 在每个"group_1"中,对于"var_1"的每个唯一值(按升序),我尝试分配一个唯一值。**

最终输出应如下所示:

id group_1 var_1 var_2
1  1       a    12    g1
2  2       a    32    g2
3  3       b    14    g1
4  4       b    17    g2
5  5       b    14    g1
6  6       b    18    g3

我试着用下面的代码来完成这个任务:

library(dplyr)

my_data[order(my_data$group_1, my_data$var_1),]

my_data %>%                                        
    group_by(group_1) %>%
    dplyr::mutate(ID = cur_group_id())

但这并没有产生正确的输出:

# A tibble: 6 x 4
# Groups:   group_1 [2]
     id group_1 var_1    ID
  <dbl> <chr>   <dbl> <int>
1     1 a          12     1
2     2 a          32     1
3     3 b          14     2
4     4 b          17     2
5     5 b          14     2
6     6 b          18     2

有谁能告诉我我做错了什么吗?

kg7wmglp

kg7wmglp1#

您的尝试非常接近!cur_group_id()为每个组提供唯一的标识符,您可以使用dplyr中的dense_rank()

my_data |> 
  group_by(group_1) |> 
  mutate(
    id = paste0("g", dense_rank(var_1))
  )

#> # A tibble: 6 × 3
#> # Groups:   group_1 [2]
#>   id    group_1 var_1
#>   <chr> <chr>   <dbl>
#> 1 g1    a          12
#> 2 g2    a          32
#> 3 g1    b          14
#> 4 g2    b          17
#> 5 g1    b          14
#> 6 g3    b          18

创建于2023年1月5日,使用reprex v2.0.2

相关问题