2017-05-05 81 views
3

我创造了一些随机数字:作为新列添加posixlt到数据帧

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 

,我想创建一个相应的时间戳列并绑定该上述数据帧。

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

这创建了10个值。现在

> 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" 

,我想将其绑定到数据帧,所以我想首先要使它成为一个矩阵:

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

,但是这给了我:

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] 
+0

使用中发现的整数存储值'as.POSIXct'而不是'lt' – akrun

+0

@akrun:你是对的!谢谢!有没有办法保存日期时间格式呢?因为convert矩阵显示秒。 – George

+0

更新了帖子 – akrun

回答

2

的原因是POSIXlt将日期时间存储为属性的list,而POSIXct则不存在。所以,最好是使用as.POSIXct

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

如果我们需要存储,它可以为data.frame

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

list完成而无需为“日期时间”被裹挟integer存储转换为matrix模式时转换为matrix


假设,我们继续与POSIXlt,然后我们发现属性

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" 

随着POSIXctlist,它是一个可以通过unclass

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