2017-01-04 45 views
1

我的數據集的樣子:如何根據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 
+1

另請參閱http://stackoverflow.com/questions/37006427/group-values-by-unique-elements/37007036#37007036爲了更好地理解下面提出的解決方案+一些其他選項的優點/缺點。 –

回答

1

我們可以使用match通過 '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 

或者另一種選擇分組後,找到獨特的 'VISIT_ID' 索引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)))) 
+2

'ave(df $ VISIT_ID,df $ ID,FUN =函數(x)匹配(x,unique(x)))' –

1

隨着base Rave我們可以轉換到VISIT_IDfactor然後numeric獲得唯一編號,每VISIT_IDID

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 
+0

我會說這是因爲你轉換爲'numeric'的方式有問題 – akrun

+0

不確定你這意味着。在哪種情況下會失敗? –

+0

假設你有像as.numeric(factor(c(「B」,「B」,「A」,「A」)))'(儘管在這個例子中顯示,它可以工作)元素 – akrun

相關問題