Add posixlt as new column to dataframe

I am generating some random numbers:

data <- matrix(runif(10, 0, 1), ncol = 2)
dataframe <- data.frame(data)

> dataframe
         X1         X2
1 0.7981783 0.13233858
2 0.9592338 0.05512942
3 0.1812384 0.74571334
4 0.1447498 0.96656930
5 0.1735390 0.37345575

      

and I want to create a corresponding timestamp column and bind it to the above dataframe.

time <- as.POSIXlt(runif(10, 0, 60), origin = "2017-05-05 10:00:00")

      

This creates 10 values.

> time
 [1] "2017-05-05 13:00:27 EEST" "2017-05-05 13:00:02 EEST" "2017-05-05 13:00:26 EEST" "2017-05-05 13:00:25 EEST" "2017-05-05 13:00:28 EEST"
 [6] "2017-05-05 13:00:17 EEST" "2017-05-05 13:00:35 EEST" "2017-05-05 13:00:08 EEST" "2017-05-05 13:00:29 EEST" "2017-05-05 13:00:32 EEST"

      

Now I want to bind it to a dataframe, so first I decided to make it a matrix:

time <- matrix(time, nrow = 5, ncol = 2)

      

but this gives me:

Warning message:
In matrix(time, nrow = 5, ncol = 2) :
  data length [11] is not a sub-multiple or multiple of the number of rows [5]

      

+3


source to share


1 answer


The reason is because it POSIXlt

stores the date time as an attribute list

, whereas it POSIXct

won't. Thus, it is better to useas.POSIXct

time <- as.POSIXct(runif(10, 0, 60), origin = "2017-05-05 10:00:00")

      

If we need to save, this can be done as list

ofdata.frame

data.frame(date1= time[1:5], date2 = time[6:10])

      

without converting to matrix

, because "Datetime" is forced into storage mode integer

when converting to matrix

.




Suppose we go to POSIXlt

, then find list

attributes

time1 <- as.POSIXlt(runif(10, 0, 60), origin = "2017-05-05 10:00:00")
unclass(time1)
#$sec
# [1] 13.424695 40.860449 57.756890 59.072140 24.425521 39.429729 58.309546
# [8]  6.294982 46.613436 25.444415

#$min
# [1] 30 30 30 30 30 30 30 30 30 30

#$hour
# [1] 15 15 15 15 15 15 15 15 15 15

#$mday
# [1] 5 5 5 5 5 5 5 5 5 5

#$mon
# [1] 4 4 4 4 4 4 4 4 4 4

#$year
# [1] 117 117 117 117 117 117 117 117 117 117

#$wday
# [1] 5 5 5 5 5 5 5 5 5 5

#$yday
# [1] 124 124 124 124 124 124 124 124 124 124

#$isdst
# [1] 0 0 0 0 0 0 0 0 0 0

#$zone
# [1] "IST" "IST" "IST" "IST" "IST" "IST" "IST" "IST" "IST" "IST"

#$gmtoff
# [1] 19800 19800 19800 19800 19800 19800 19800 19800 19800 19800

#attr(,"tzone")
#[1] ""    "IST" "IST"

      

C POSIXct

is the integer storage values ​​that can be found withunclass

 unclass(time)
 #[1] 1493978445 1493978451 1493978432 1493978402 1493978447 1493978441
 #[7] 1493978445 1493978450 1493978419 1493978425
 #attr(,"tzone")
 #[1] ""

      

+2


source







All Articles