我有一个下面的数据框
x=c(1:21)
y=c(rep(0,2),rep(3,7),rep(1,12))
z=c(rep(1,17),rep(3,4))
table=data.table(x,y,z)在这种情况下,我需要将y列中的所有3替换为y值,其中z值为3(在本例中为1)。
table[, N := .N, rleid(y)]
table[, y := replace(y, N ==1, NA)]
table[N==1, y := zoo::na.locf(y)][, N := NULL]我试过了,但是这个只替换了一次,并不是所有的.Any帮助都被感谢。
发布于 2020-04-17 04:58:26
我们可以从data.table使用fifelse
library(data.table)
table[, y := fifelse(y == 3, y[z==3][1], y)]发布于 2020-04-16 14:28:53
我们可以replace所有的y值,其中y为3,第一次出现y值,其中z为3。
library(data.table)
table[, y := replace(y, y == 3, y[z==3][1])]
#Or similarly,
#table[, y := replace(y, y == 3, y[which.max(z==3)])]https://stackoverflow.com/questions/61243889
复制相似问题