R:使用带有'if'

时间:2016-03-06 22:14:12

标签: r reference data.table lapply

如果数据表中的值大于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

任何建议都非常(!)赞赏。

1 个答案:

答案 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]

希望这会有所帮助。