R as.Date () имеет два разных формата возврата - PullRequest
0 голосов
/ 19 июня 2020

Вот мое наблюдение. Учитывая этот пример данных

> xx
     [,1]  [,2] [,3] [,4] [,5] [,6]      
[1,] "ABC" "20" "04" "13" "C"  "00700000"
[2,] "XYZ" "20" "04" "13" "C"  "00800000"
> class(xx)
[1] "matrix"

, я написал простую функцию для анализа этой матрицы данных:

foo <- function(xx)
{ 
   year=2000+as.integer(xx[2])
   month = as.integer(xx[3])
   day=as.integer(xx[4])
   as.Date(sprintf("%02d-%02d-%04d",month,day, year), format="%m-%d-%Y")
}

При применении этой функции к xx с помощью apply () я получил следующее:

> apply(xx, 1, foo)
[1] 18365 18365

Я не знаю, почему здесь отображалось 18365, может, 18365 представляет NA? В некоторых сообщениях о переполнении стека говорится, что дата чувствительна к Sys.setlocale (). Но если я просто наберу это в том же терминале:

> as.Date(sprintf("%02d-%02d-%04d", 4, 23, 2020), format="%m-%d-%Y")
[1] "2020-04-23"

Итак, похоже, доказано, что для as.Date () нет проблемы с Sys.setlocale (). Может кто-нибудь указать, в чем проблема? Спасибо Так доказано

1 Ответ

0 голосов
/ 19 июня 2020

apply сделает это. См. Ссылку на as.vector в файле справки для apply.

1) Вместо этого используйте ISOdate и as.Date.

as.Date(ISOdate(as.integer(m[, 2]) + 2000L, m[, 3], m[, 4]))
## [1] "2020-04-13" "2020-04-13"

2) или as.Date и paste :

as.Date(paste(as.integer(m[, 2]) + 2000L, m[, 3], m[, 4], sep = "-"))
## [1] "2020-04-13" "2020-04-13"

Примечание

Lines <- '"ABC" "20" "04" "13" "C"  "00700000"
"XYZ" "20" "04" "13" "C"  "00800000"'
m <- matrix(scan(text = Lines, what = "", quiet = TRUE), 2, byrow = TRUE)

m
##      [,1]  [,2] [,3] [,4] [,5] [,6]      
## [1,] "ABC" "20" "04" "13" "C"  "00700000"
## [2,] "XYZ" "20" "04" "13" "C"  "00800000"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...