[英]Assigning values to a group based on previous rows in R
我有一個像這樣的數據表:
ID Type
1 I
1 A
1 A
2 I
2 A
2 I
2 C
2 I
2 I
我想添加一個列Sequence,如下所示:
ID Type Seq
1 I 1
1 A 1
1 A 1
2 I 1
2 A 1
2 I 2
2 C 2
2 I 3
2 I 4
邏輯是:
當Type = I時Seq = previous_row_for_user_where_I_occurs +1
Seq =用戶在Type = A或C時先前發生的I
因此,基本上,對於給定的用戶編號,所有I都按順序出現。 如果在兩者之間出現A或C,則為其分配在其之前出現的I的值。 這些ID已使用日期字段進行了排序。
我也參考了以下內容,但它沒有幫助,因為如果某個用戶兩次出現“ A”,則第二次出現的編號不正確。
根據R中的前一行按順序分配值
我現在正在使用for循環,因為我有1000萬行,所以需要幾個小時。
我認為data.table
包是解決此問題的最佳選擇:
> dt[, Seq := cumsum(Type == "I"), by = ID]
> dt
ID Type Seq
1: 1 I 1
2: 1 A 1
3: 1 A 1
4: 2 I 1
5: 2 A 1
6: 2 I 2
7: 2 C 2
8: 2 I 3
9: 2 I 4
我們可以使用dplyr
library(dplyr)
df1 %>%
group_by(ID) %>%
mutate(Seq = cumsum(Type=="I"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.