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

时间:2017-05-22 10:59:21

标签: r dplyr

超过2,000个科目。我想改变' time2'的价值。按主题每第一行为0。例如,ID = 2的主题有1个用于' time2'在这个主题的第一行。考虑到2k科目,如何将其改为0?

ID    time1  time2   
 1      0     0
 1      0     1
 1      1     5
 2      0     1
 2      1     3
 2      3     5
 3   ....

2 个答案:

答案 0 :(得分:4)

使用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

或者使用data.table,创建按“ID”分组的行索引(.I),并将“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

或者是紧凑的base R选项(假设'ID'是order ed)

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

答案 1 :(得分:3)

您还可以将app.post('/uploadImage', function(request, response) { var readerStream = fs.createReadStream(request.files[0].path); var dest_file = pathModule.join(request.files[0].destination, request.files[0].originalname); var writerStream = fs.createWriteStream(dest_file); var stream = readerStream.pipe(writerStream); stream.on('finish', function(){ fs.unlink(request.files[0].path); }); }); dplyr结合使用:

replace