значение даты в формате даты в R

я пытаюсь изменить формат даты, которую я импортирую из файла CSV. класс для столбца даты является фактором, но когда я хочу использовать функцию «as.Date», у меня возникает ошибка, что формат строки неверен.

> New_His_data$BirthDate[1]
[1] 36473
1378 Levels: 13-1-1990 13-1-1991 13-10-1959 13-10-1973 13-10-1979 13-10-1988 13-10-1989 13-10-1994 13-11-1963 13-11-1970 ... 36473
> as.Date(New_His_data$BirthDate[1],origin = "1899-12-30")
Error in charToDate(x) : 
  character string is not in a standard unambiguous format
> as.Date(strptime(New_His_data$BirthDate[1],"%d-%m-%Y"),origin ="1899-12-30")
[1] NA

когда я использую значение как число, оно работает правильно

> as.Date(36473,origin = "1899-12-30")
[1] "1999-11-09"

я пытался найти какой-нибудь пост по этой проблеме, но ничего не нашел, пожалуйста, помогите мне с решением или ссылкой на решение, спасибо


person Ehsan    schedule 05.05.2018    source источник
comment
это связано с str/числовыми значениями и тем, как они интерпретируются функцией as.Date(). Пожалуйста, попробуйте as.Date(as.numeric(New_His_data$BirthDate[1]),origin = "1899-12-30")   -  person 93i7hdjb    schedule 05.05.2018
comment
это работает, но значение на самом деле не то же самое, данные сильно отстают от фактической даты   -  person Ehsan    schedule 05.05.2018
comment
› as.Date(36473,origin = 1899-12-30) [1] 1999-11-09 › as.Date(as.numeric(New_His_data$BirthDate[1]),origin = 1899-12-30) [1 ] 1903-10-09   -  person Ehsan    schedule 05.05.2018
comment
спасибо за комментарий, это помогло мне получить представление   -  person Ehsan    schedule 05.05.2018
comment
Например, 1981-1-2 ≠ 1981-01-02... Нули важны   -  person rg255    schedule 05.05.2018


Ответы (2)


Ваши данные поступили как переменная factor, вероятно, через read.csv() или связаны, если не задано StringsAsFactors=FALSE.

Ничего такого, что преобразование в символ не может исправить. Макетный пример:

R> v <- factor(c("13-1-1990", "13-1-1991", "13-10-1959")) # your first three
R> v
[1] 13-1-1990  13-1-1991  13-10-1959
Levels: 13-1-1990 13-1-1991 13-10-1959
R> 
R> d <- as.Date(as.character(v), format="%d-%m-%Y")
R> d        ## key here were the as.character() and the correct format
[1] "1990-01-13" "1991-01-13" "1959-10-13"
R> 
R> class(d) ## these are now Date objects
[1] "Date"
R> 
R> d + 1    ## that we can compute with
[1] "1990-01-14" "1991-01-14" "1959-10-14"
R> 
person Dirk Eddelbuettel    schedule 05.05.2018

я мог решить проблему только с двумя преобразованиями типа данных из даты в строку в число, а затем я использовал функцию «as.Date» для изменения формата.

> New_His_data$BirthDate[1]
[1] 36473
1378 Levels: 13-1-1990 13-1-1991 13-10-1959 13-10-1973 13-10-1979 13-10-1988 13-10-1989 13-10-1994 13-11-1963 13-11-1970 ... 36473
> as.Date(New_His_data$BirthDate[1],origin = "1899-12-30")
Error in charToDate(x) : 
  character string is not in a standard unambiguous format
> as.Date(strptime(New_His_data$BirthDate[1],"%d-%m-%Y"),origin ="1899-12-30")
[1] NA
> as.Date(as.numeric(as.character(New_His_data$BirthDate[1])),origin = "1899-12-30")
[1] "1999-11-09"
person Ehsan    schedule 05.05.2018