第一次出现0后,将行列的后续值更改为0

我有以下内容data.table:-

a <- data.table(name = letters[1:5], Y1 = c(1, 1, 0, 1, 0), Y2 = c(1,1,1,1,0),
                Y3 = c(1,1,1,0,1), Y4 = c(1,1,1,1,1), Y5 = c(0,0,0,0,1))

#   name Y1 Y2 Y3 Y4 Y5
#1:    a  1  1  1  1  0
#2:    b  1  1  1  1  0
#3:    c  0  1  1  1  0
#4:    d  1  1  0  1  0
#5:    e  0  0  1  1  1

我想对此进行操作data.table,以便如果在行中检测到 0 的列Y1to Y5,则所有后续列值都应更改为 0。例如,对于 中的4data.table0行,第一个 0 在 中Y3。因此,Y4并且Y5应该更改为 0。在5第 th 行中,第一个 0 出现在Y1列中,因此,Y2直到Y5该行的列应该更改为 0。

结果data.table应如下:-

b <- a <- data.table(name = letters[1:5], Y1 = c(1, 1, 0, 1, 0), Y2 = c(1,1,0,1,0),
                 Y3 = c(1,1,0,0,0), Y4 = c(1,1,0,0,0), Y5 = c(0,0,0,0,0))

#   name Y1 Y2 Y3 Y4 Y5
#1:    a  1  1  1  1  0
#2:    b  1  1  1  1  0
#3:    c  0  0  0  0  0
#4:    d  1  1  0  0  0
#5:    e  0  0  0  0  0

回答

这是一个选项:

cols <- paste0("Y", 1L:5L)
a[, (cols) := lapply(Reduce(`&`, .SD, accumulate=TRUE), as.integer), .SDcols=cols]


以上是第一次出现0后,将行列的后续值更改为0的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>