[英]How to assign incremental values based on two columns in R?
我的數據集看起來像:
ID VISIT_ID DATE DV
1001 112233 12-23 3
1001 112233 12-23 4
1001 112244 12-23 5
1001 112244 12-23 6
1001 112244 12-23 7
1001 112244 12-23 8
1002 112254 12-23 3
1002 112254 12-23 4
1002 112254 12-23 5
1002 112264 12-23 6
1002 112264 12-23 7
1002 112264 12-23 8
我想要如下結果; 它為每個唯一的 VISIT_ID 分配一個遞增的遭遇值。 對於每個 ID,序列將從 1 重新開始。 幫助將不勝感激。
ID VISIT_ID DATE DV ENCOUNTER
1001 112233 12-23 3 1
1001 112233 12-23 4 1
1001 112244 12-23 5 2
1001 112244 12-23 6 2
1001 112244 12-23 7 2
1001 112244 12-23 8 2
1002 112254 12-23 3 1
1002 112254 12-23 4 1
1002 112254 12-23 5 1
1002 112264 12-23 6 2
1002 112264 12-23 7 2
1002 112264 12-23 8 2
我們可以使用match
找到唯一的 'VISIT_ID' 按'ID'分組后的索引
library(dplyr)
df1 %>%
group_by(ID) %>%
mutate(ENCOUNTER = match(VISIT_ID, unique(VISIT_ID)))
# ID VISIT_ID DATE DV ENCOUNTER
# <int> <int> <chr> <int> <int>
#1 1001 112233 12-23 3 1
#2 1001 112233 12-23 4 1
#3 1001 112244 12-23 5 2
#4 1001 112244 12-23 6 2
#5 1001 112244 12-23 7 2
#6 1001 112244 12-23 8 2
#7 1002 112254 12-23 3 1
#8 1002 112254 12-23 4 1
#9 1002 112254 12-23 5 1
#10 1002 112264 12-23 6 2
#11 1002 112264 12-23 7 2
#12 1002 112264 12-23 8 2
或者另一個選項duplicated
df1 %>%
group_by(ID) %>%
mutate(ENCOUNTER = cumsum(!duplicated(VISIT_ID)))
或者使用data.table
library(data.table)
setDT(df1)[, ENCOUNTER := match(VISIT_ID, unique(VISIT_ID), by = ID]
或與base R
with(df1, ave(VISIT_ID, ID, FUN = function(x) cumsum(!duplicated(x))))
隨着base R
ave
我們可以轉換VISIT_ID
到factor
,然后numeric
獲得唯一編號,每VISIT_ID
的ID
df$ENCOUNTER <- ave(df$VISIT_ID, df$ID,FUN = function(x) as.numeric(as.factor(x)))
df
# ID VISIT_ID DATE DV ENCOUNTER
#1 1001 112233 12-23 3 1
#2 1001 112233 12-23 4 1
#3 1001 112244 12-23 5 2
#4 1001 112244 12-23 6 2
#5 1001 112244 12-23 7 2
#6 1001 112244 12-23 8 2
#7 1002 112254 12-23 3 1
#8 1002 112254 12-23 4 1
#9 1002 112254 12-23 5 1
#10 1002 112264 12-23 6 2
#11 1002 112264 12-23 7 2
#12 1002 112264 12-23 8 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.