首页 > 解决方案 > 根据分组的 id 创建新的观察结果

问题描述

我想基于另一个 id 变量创建一个新的 id 变量。这是我的数据的样子:

ID
250
250
340
340
340
650
650
650

我想:

ID      New_ID
250       1
250       1
340       2
340       2
340       2
650       3
650       3
650       3

我尝试在 tidyverse 中使用“group_by”,但我遇到了错误。有人可以帮忙吗?

标签: rdataframedplyrgroup-bytidyverse

解决方案


一种选择是使用rleidfrom data.table

data.table::rleid(d$ID)

# [1] 1 1 2 2 2 3 3 3

将该列添加到数据中:

d %>%
    mutate(new_id = data.table::rleid(ID))

   ID new_id
1 250      1
2 250      1
3 340      2
4 340      2
5 340      2
6 650      3
7 650      3
8 650      3

另一种选择是利用该factor功能。即使您的数据未按以下方式排序,这也将起作用ID

d %>%
    mutate(new_id = as.numeric(factor(ID)))

   ID new_id
1 250      1
2 250      1
3 340      2
4 340      2
5 340      2
6 650      3
7 650      3
8 650      3

数据

d <- structure(list(ID = c(250L, 250L, 340L, 340L, 340L, 650L, 650L, 
                           650L)), 
               class = "data.frame", 
               row.names = c(NA, -8L))

推荐阅读