使用dplyr更改第一行group_by主题ID的变量值

jua*_*nli 1 r dplyr

2,000多门科目。我想按主题将每个第一行的'time2'值更改为0。例如,ID = 2主题在该主题的第一行中的“ time2”具有1。考虑到2k主题,如何将其更改为0?

ID    time1  time2   
 1      0     0
 1      0     1
 1      1     5
 2      0     1
 2      1     3
 2      3     5
 3   ....
Run Code Online (Sandbox Code Playgroud)

akr*_*run 6

使用dplyr,我们可以ifelse根据逻辑条件使用row_number()

df2 %>% 
    group_by(ID) %>% 
    mutate(time2 = ifelse(row_number()==1, 0, time2))
# A tibble: 6 x 3
# Groups: ID [2]
#     ID time1 time2
#  <int> <int> <dbl>
#1     1     0     0
#2     1     0     1
#3     1     1     5
#4     2     0     0
#5     2     1     3
#6     2     3     5
Run Code Online (Sandbox Code Playgroud)

或使用data.table,创建.I按“ ID”分组的行索引(),并将:=“ time2”中与该行索引相对应的那些元素分配()为0

library(data.table)
setDT(df2)[df2[, .I[seq_len(.N)==1] , ID]$V1, time2 := 0][]
#    ID time1 time2
#1:  1     0     0
#2:  1     0     1
#3:  1     1     5
#4:  2     0     0
#5:  2     1     3
#6:  2     3     5
Run Code Online (Sandbox Code Playgroud)

或一个紧凑的base R选择是(假设已order编辑“ ID” )

df$time2[!duplicated(df$ID)] <- 0
df
#   ID time1 time2
#1  1     0     0
#2  1     0     1
#3  1     1     5
#4  2     0     0
#5  2     1     3
#6  2     3     5
Run Code Online (Sandbox Code Playgroud)