Ошибка при фильтрации по дате в R: объект типа «замыкание» не может быть подмножеством - PullRequest
0 голосов
/ 04 мая 2020

Я хочу создать новую переменную в моей таблице данных в R, которая будет равна 1, если дата события наступит через определенное время (2019-01-01) и будет равна 0 в противном случае. Я использую следующий код:

dt$time <- ifelse[dt$date > '2019-01-01',1,0]

Но я получаю ошибку:

объект типа 'замыкание' не является поднабором.

Если честно, я не понимаю, что не так.

Ответы [ 2 ]

2 голосов
/ 04 мая 2020

Вы используете неправильный синтаксис, вы, вероятно, имели в виду:

dt$time <- ifelse(dt$date > '2019-01-01',1,0)

Даже если приведенная выше работа не даст вам правильный вывод всегда, потому что вы сравниваете дату со строкой здесь (отметьте class('2019-01-01')). Вероятно, вам следует использовать

dt$time <- ifelse(dt$date > as.Date('2019-01-01'), 1, 0)

, но вам не нужно ifelse здесь, вы можете преобразовать логические значения после сравнения в целочисленные значения.

dt$time <- as.integer(dt$date > as.Date('2019-01-01'))
#OR
#dt$time <- +(dt$date > as.Date('2019-01-01'))
1 голос
/ 04 мая 2020

base::ifelse путается с переменными форматами. Будьте осторожны при использовании. В пакете dplyr есть альтернатива:

initial.date <- as.Date('2019-01-01')
dt$time <- dplyr::if_else(
    condition = dt$date > initial.date,
    true = 1,
    false = 0
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...