在r data.table中使用条件语句

在r data.table中使用条件语句,r,data.table,R,Data.table,我正在尝试使用data.table根据特定条件重新编码变量。我的原始数据集有大约3000万条记录,创建变量后大约有130个变量。我使用了这里建议的方法:(M1)和这里的(M2) 我的目标是使用data.table获得以下代码的等价物,但这是适用的 samp$lf5 <- samp$loadfactor5 samp$lf5 <- with(samp, ifelse(loadfactor5 < 0, 0, lf5)) 任何关于如何完成此任务的见解都将受到赞赏。我的数据集有300

我正在尝试使用data.table根据特定条件重新编码变量。我的原始数据集有大约3000万条记录,创建变量后大约有130个变量。我使用了这里建议的方法:(M1)和这里的(M2)

我的目标是使用data.table获得以下代码的等价物,但这是适用的

samp$lf5 <- samp$loadfactor5

samp$lf5 <- with(samp, ifelse(loadfactor5 < 0, 0, lf5))
任何关于如何完成此任务的见解都将受到赞赏。我的数据集有3000万条记录,所以我希望使用data.table来真正缩短运行时间

谢谢

克里希南

为了完整起见,这里提供并包含了克里希南的答案

samp[,lf5:=ifelse(loadfactor5<0,0,loadfactor5)]
另一种方式(我更喜欢这种方式,因为我认为它更干净):


我使用data.table和一个有90M行的数据集;我一直对data.table对于上述操作的速度感到惊讶。

samp[,lf5:=ifelse(loadfactor5<0,0,loadfactor5)]
;在上搜索
.SD
以找出它是什么/doesI能够使用此命令获得所需的结果。@Krishnan,请您自己回答并接受它,以便Q保持回答状态,好吗?谢谢。我想问题的关键是用“:”而不是“=”。您还可以编写samp[,lf5:=loadfactor5*(loadfactor>=0)]
samp[,lf5 = if(loadfactor5 <0) 0 else loadfactor5]
Error in `[.data.table`(samp, , lf5 = if (loadfactor5 < 0) 0 else loadfactor5) : 
unused argument (lf5 = if (loadfactor5 < 0) 0 else loadfactor5)
samp[,list(lf5 = if(loadfactor5 <0) 0 else loadfactor5)]
Col1 <- "loadfactor5"
Col2 <- "lf5"

setkeyv(samp,Col1)
samp[,(Col2) :=.SD,.SDCols = Col1][Col1<0,(Col2) := .SD, .SDcols = 0]
Error in `[.data.table`(samp, , `:=`((Col2), .SD), .SDCols = Col1) : 
unused argument (.SDCols = Col1)
samp[, lf5 := 0]; samp[loadfactor5 > 0, lf5 := loadfactor5];