gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:08:57 24 4
gpt4 key购买 nike

我正在尝试使用data.table根据某些条件重新编码变量。我的原始数据集大约有3000万条记录,创建完所有变量后大约有130个变量。我使用了这里建议的方法:conditional statements in data.table(M1)以及这里的data.table: Proper way to do create a conditional variable when column names are not known?(M2)

我的目标是获取下面的代码,但可以使用data.table

samp$lf5 <- samp$loadfactor5

samp$lf5 <- with(samp, ifelse(loadfactor5 < 0, 0, lf5))


我承认我不太了解.SD和.SDCols,所以我可能使用错了。下面给出(M1)和(M2)的代码和错误,示例数据集在此处: http://goo.gl/Jp97Wn

(M1)

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)]


它给出lf5作为列表,但不作为samp data.table的一部分,并且由于lf5的值仍小于0,因此并未真正应用该条件。

(M2)

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)


任何有关如何完成此工作的见解都值得赞赏。我的数据集有3000万条记录,因此我希望使用data.table真正减少运行时间。

谢谢,

克里希南

最佳答案

eddi提供的答案,出于完整性考虑,在此包含。

samp[, lf5 := ifelse(loadfactor5 < 0, 0, loadfactor5)]

关于r - 在r data.table中使用条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25571555/

24 4 0