Даты и неправдоподобные даты - PullRequest
1 голос
/ 10 октября 2019

Эта проблема относится к фрейму данных, состоящему из пропущенных значений, дат и некоторых неправдоподобных дат, имеющих отрицательные знаки, предшествующие дню и / или месяцу. Я читаю данные из файла Excel в R, используя код

df <- data.frame(read_excel("dat.xlsx", col_types = c("numeric", "guess"))) 

Это меняет даты на числовые значения. Конечно, если я хочу получить даты, я могу заменить «угадай» в вышеприведенном коде на «дату». Однако я хочу получить неправдоподобные даты и заменить все остальные записи на NA. Примером фрейма данных является

df<-data.frame("id"=c(1,2,3,4,5),
"date" = c("-2/8/2018","-22/11/2018","-1/-2/2018",39586,"NA"))

Числовое значение 39586 на самом деле является датой (т.е. 11/04/2008), которая была преобразована в числовую после считывания файла excel в R.

С использованием

df$date<-df[is.integer(df$date)] <- NA

Я пытался преобразовать все целые числа в NA и сохранить неправдоподобные даты, но все компоненты столбца даты изменились на NA, то есть

  id date
1  1   NA
2  2   NA
3  3   NA
4  4   NA
5  5   NA

Как это можно решить? Ожидаемый результат будет выглядеть так:

  id        date
1  1   -2/8/2018
2  2 -22/11/2018
3  3  -1/-2/2018
4  4          NA
5  5          NA

Во-вторых, как я могу удалить знак минус, прикрепленный к датам? Я ценю вашу помощь в этом.

1 Ответ

2 голосов
/ 10 октября 2019

Мы можем использовать gsub, чтобы заменить числа со знаком минус на 99, а затем использовать replace, чтобы превратить значения в NA, которые не соответствуют шаблону даты.

df$date <- gsub("-\\d+", "99", df$date)
df$date <- replace(df$date, !grepl("\\d+/\\d+/\\d+", df$date), NA)
df

#  id       date
#1  1  99/8/2018
#2  2 99/11/2018
#3  3 99/99/2018
#4  4       <NA>
#5  5       <NA>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...