簡體   English   中英

根據R中的前一行將值分配給組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM