如果数据表中的值大于1,我想将其设置为1。
我尝试了很多不同的东西。代码似乎应该工作但是给我下面代码的消息并删除第一列(V1)
DT <-as.data.table(matrix(1:9, 3,3))
cList <- c("V1","V2")
DT[,(cList) := lapply(.SD, function(x) if (x > 1) 1),.SDcols = cList]
Warning messages:
1: In if (x > 1) 1 :
the condition has length > 1 and only the first element will be used
2: In if (x > 1) 1 :
the condition has length > 1 and only the first element will be used
任何建议都非常(!)赞赏。
答案 0 :(得分:2)
正如大卫的评论所说,你正在收到警告,因为如果在评估条件时只采用第一个元素。因此,你可以使用ifelse,它是矢量化的。
这是我使用pmin的替代解决方案。
DT <-as.data.table(matrix(1:9, 3,3))
cList <- c("V1","V2")
DT[, (cList) := lapply(.SD, function(x) pmin(1, x) ), .SDcols=cList]
希望这会有所帮助。