如何在多个值中替换值?

时间:2015-02-03 22:45:31

标签: r data.table

我是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.提前感谢。

2 个答案:

答案 0 :(得分:2)

像这样:

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

答案 1 :(得分:2)

最有效(和惯用)方式是在这里使用set()for-loopset():=低开销版本,旨在处理此类重复案例。

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

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