R 替换所有事件

R 替换所有事件,r,dplyr,data.table,R,Dplyr,Data.table,我有一个下面的数据框 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的值替换y列中的所有3,其中z值为3(在本例中为1) 我试过了,但这一次只替换了一次,而不是全部。非常感谢您的帮助。我们可以替换所有y值,其中y为3,第一次出现y值,其中z为3 library(data.table) table[, y := replace(y, y ==

我有一个下面的数据框

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的值替换y列中的所有3,其中z值为3(在本例中为1)


我试过了,但这一次只替换了一次,而不是全部。非常感谢您的帮助。

我们可以
替换
所有
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)])]

我们可以使用
data.table中的
fifelse

library(data.table)
table[, y := fifelse(y == 3, y[z==3][1], y)]

在本例中,
z
的最后4个值为3。顺便说一句,所有对应的
y
值在这里都是1,但是如果
y
值不相同,那么最后4个值不是1、2、3和4呢?你会取哪个值?可能类似于
DT[y==3L,y:=DT[z==3L,y[1L]]]
(使用
DT
而不是
table
,因为后者是一个非常有用的函数)?此外,还有许多可能的场景未在OP中解决。
library(data.table)
table[, y := fifelse(y == 3, y[z==3][1], y)]