r-根据数据框架列中的条件向前携带的ID编号

  • 本文关键字:编号 ID 条件 数据 框架 r sorting
  • 更新时间 :
  • 英文 :


我有一个数据框架,其中包括以下结构(df)。我想修改ID2, PERIOD,以使ID2,周期编号向前携带到AMT > 0(请注意,当AMT> 0时,EVID为0)。因此,ID2==13/PERIOD==2的前两行实际上应为ID2==12/PERIOD==1,如dfout数据框架所示。ans so on。

df <- 
ID   ID2   TIME   DVID    AMT   DV    PERIOD
 1    12     0      0      50    NA    1 
 1    12     0.5    1      0     10    1
 1    12     0.5    2      0     15    1
 1    13     600    1      0     2.5   2
 1    13     600    2      0     4     2
 1    13     600    0      100   NA    2
 1    13     602    1      0     20    2
 1    13     602    2      0     35    2
 1    14     800    1      0     5     3
 1    14     800    2      0     10    3
 1    14     800    0      50    NA    3

dfout <- 
ID   ID2   TIME   DVID    AMT   DV    PERIOD
 1    12     0      0      50    NA    1 
 1    12     0.5    1      0     10    1
 1    12     0.5    2      0     15    1
 1    12     600    1      0     2.5   1
 1    12     600    2      0     4     1
 1    13     600    0      100   NA    2
 1    13     602    1      0     20    2
 1    13     602    2      0     35    2
 1    13     800    1      0     5     2
 1    13     800    2      0     10    2
 1    14     800    0      50    NA    3

在r?

中如何执行此操作

我们可以使用逻辑向量(DVID==0 & AMT > 0)的cumsum循环(" ID2"," ofere")来创建分组索引,我们更改unique值。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

df[c("ID2", "PERIOD")] <- lapply(df[c("ID2", "PERIOD")], function(x) 
               unique(x)[with(df, cumsum(DVID==0 & AMT > 0))])
df
#   ID ID2  TIME DVID AMT   DV PERIOD
#1   1  12   0.0    0  50   NA      1
#2   1  12   0.5    1   0 10.0      1
#3   1  12   0.5    2   0 15.0      1
#4   1  12 600.0    1   0  2.5      1
#5   1  12 600.0    2   0  4.0      1
#6   1  13 600.0    0 100   NA      2
#7   1  13 602.0    1   0 20.0      2
#8   1  13 602.0    2   0 35.0      2
#9   1  13 800.0    1   0  5.0      2
#10  1  13 800.0    2   0 10.0      2
#11  1  14 800.0    0  50   NA      3

或使用dplyr

library(dplyr)
df %>% 
   mutate_each(funs(unique(.)[cumsum(DVID==0 & AMT > 0)]), DV, PERIOD)

最新更新