R: Назначение класса POSIXct фрейму данных - PullRequest
3 голосов
/ 17 декабря 2010

Когда я назначаю объект POSIXct в фрейм данных, он преобразует его в целочисленный эквивалент, например:

> x<-as.data.frame(matrix(nrow=1,ncol=2))
> x
  V1 V2
1 NA NA
> x[1,1]<-as.POSIXct("2010-12-07 08:00:00")
> x
          V1 V2
1 1291708800 NA

Есть ли способ остановить это поведение или легко преобразовать целые числа обратно в POSIXct после того, как я выполнил все назначения?

Ответы [ 2 ]

5 голосов
/ 17 декабря 2010

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

x <- as.data.frame(matrix(nrow=1,ncol=2))
class(x[1,1])
[1] "logical"

Посмотрите, как ему уже присвоено class. matrix может иметь только один тип данных.

x[,1] <- as.POSIXct(x[,1])
x[1,1] <- as.POSIXct("2010-12-07 08:00:00")
class(x[1,1])
[1] "POSIXt"  "POSIXct"
x
                   V1 V2
1 2010-12-07 08:00:00 NA

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

x <- data.frame(date=as.POSIXct("2010-12-07 08:00:00"), value=NA)
1 голос
/ 21 мая 2014

У меня была точно такая же проблема.Чтобы исправить это, я объявил класс столбца фрейма данных, используя as.POSIXct().

Пример:

> temp = data.frame(col1 = NA)
> temp[1,] = Sys.time()
> str(temp)
'data.frame':   1 obs. of  1 variable:
 $ col1: num 1.4e+09

Но

> temp = data.frame(col1 = as.POSIXct(NA,""))
> temp[1,] = Sys.time()
> str(temp)
'data.frame':   1 obs. of  1 variable:
 $ col1: POSIXct, format: "2014-05-21 15:35:46"

Интересно, что хотяначальный класс столбца по умолчанию "logical":

> temp = data.frame(col1 = NA)
> str(temp)
'data.frame':   1 obs. of  1 variable:
 $ col1: logi NA

Вы можете записать в него символы:

> temp = data.frame(col1 = NA)
> temp[1,] = "hello"
> str(temp)
'data.frame':   1 obs. of  1 variable:
 $ col1: chr "hello"

Однако, как и POSIXct, вы не можете записывать коэффициенты:

> temp = data.frame(col1 = NA)
> temp[1,] = as.factor("hello")
> str(temp)
'data.frame':   1 obs. of  1 variable:
 $ col1: int 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...