R data.table использовать оператор if в lapply - PullRequest
0 голосов
/ 15 октября 2018

Я хотел бы преобразовать некоторые столбцы из чисел в формат даты;и я думаю об использовании следующего кода:

colList <- c("Date1","Date2")
dataDT[, (colList) := lapply(.SD, function(x){
  if (x == 0) {NA}
  else {as.Date(x, origin = "1900-01-01")}
}), .SDcols = colList]

В основном, если значение равно 0, тогда используйте NA, а не "1900-01-01".Теперь проблема:

Warning messages:
1: In if (x == 0) { :
  the condition has length > 1 and only the first element will be used

Есть ли способ ее решить?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Используйте «ifelse» вместо «if» в этом случае:

ifelse (x == 0,NA, as.Date(x, origin = "1900-01-01"))
0 голосов
/ 15 октября 2018

Другой вариант - использовать replace:

dataDT[, (colList) := lapply(.SD, 
        function(x) as.Date(replace(x, x==0, NA), origin = "1900-01-01")),
    .SDcols = colList]
...