基于分组的 id 创建新的观察

时间:2021-03-22 14:47:46

标签: r dataframe dplyr group-by tidyverse

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

target_table = f"""
  MERGE INTO {target_table_name} target
  USING {staging_table_name} source
  ON
      source.ResponseRgBasketId = target.ResponseRgBasketId
  AND source.RequestTimestamp   = target.RequestTimestamp
  WHEN
      MATCHED
  THEN UPDATE SET
      *
  WHEN NOT MATCHED
  THEN INSERT
      *

我想要:

ID
250
250
340
340
340
650
650
650

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

1 个答案:

答案 0 :(得分:0)

一种选择是使用 rleid 中的 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))