我是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.提前感谢。
答案 0 :(得分:2)
像这样:
DT1[,lapply(.SD, function(u) ifelse(u>1,1,0))]
答案 1 :(得分:2)
最有效(和惯用)方式是在这里使用set()
和for-loop
。 set()
是:=
的低开销版本,旨在处理此类重复案例。
for (cols in c("A", "B", "C")) {
set(DT1, i=which(DT1[[cols]] > 1L), j=cols, value=0L)
}
请注意,@ ColonelBeauvel的解决方案只返回一个全新的数据集,以替换这些列的某些行,这是data.table
试图避免的行!