如何替换多个值中的值?
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-loop
。 set()
是 :=
的 低开销 版本,旨在处理像这样的重复情况。
for (cols in c("A", "B", "C")) {
set(DT1, i=which(DT1[[cols]] > 1L), j=cols, value=0L)
}
请注意,@ColonelBeauvel 的解决方案 returns 一个全新的数据集只是为了替换那些列的一些行,这是 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 个命令。提前致谢。
像这样:
DT1[,lapply(.SD, function(u) ifelse(u>1,1,0))]
最有效(和惯用)的方法是在此处使用 set()
和 for-loop
。 set()
是 :=
的 低开销 版本,旨在处理像这样的重复情况。
for (cols in c("A", "B", "C")) {
set(DT1, i=which(DT1[[cols]] > 1L), j=cols, value=0L)
}
请注意,@ColonelBeauvel 的解决方案 returns 一个全新的数据集只是为了替换那些列的一些行,这是 data.table
试图避免的!