我想根据另一个 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”来使用它,但我遇到了错误。有人可以帮忙吗?
答案 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))