如何替换多个值中的值?

How to replace value in multiple values?

我是 data.table 的新手。我只知道如何逐列替换值。有什么办法可以通过 1 个命令来完成吗?这是我的示例代码:

DT1 = data.table(A=sample(3, 10, TRUE), 
             B=sample(3, 10, TRUE),
             C=sample(3, 10, TRUE))

DT1[,A:=ifelse(A>1,1,0),]
DT1[,B:=ifelse(B>1,1,0),]
DT1[,C:=ifelse(C>1,1,0),]

理想情况下,有一种方法可以将最后 3 个命令合并为 1 个命令。提前致谢。

像这样:

DT1[,lapply(.SD, function(u) ifelse(u>1,1,0))]

最有效(和惯用)的方法是在此处使用 set()for-loopset():= 低开销 版本,旨在处理像这样的重复情况。

for (cols in c("A", "B", "C")) {
    set(DT1, i=which(DT1[[cols]] > 1L), j=cols, value=0L)
}

请注意,@ColonelBeauvel 的解决方案 returns 一个全新的数据集只是为了替换那些列的一些行,这是 data.table 试图避免的!