gpt4 book ai didi

r - 将 posixlt 作为新列添加到数据框

转载 作者:行者123 更新时间:2023-12-04 10:46:15 26 4
gpt4 key购买 nike

我正在创建一些随机数:

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

我想创建一个相应的时间戳列并将其绑定(bind)到上述数据框。
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"

现在,我想将它绑定(bind)到数据框,所以我首先想把它变成一个矩阵:
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]

最佳答案

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

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

如果我们需要存储,可以使用 listdata.frame
data.frame(date1= time[1:5], date2 = time[6:10])

不转换为 matrix因为“日期时间”被强制转换为 integer转换为 matrix 时的存储模式.

假设,我们继续 POSIXlt ,然后我们找到 list属性
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"

POSIXct , 是 unclass 可以找到的整数存储值
 unclass(time)
#[1] 1493978445 1493978451 1493978432 1493978402 1493978447 1493978441
#[7] 1493978445 1493978450 1493978419 1493978425
#attr(,"tzone")
#[1] ""

关于r - 将 posixlt 作为新列添加到数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43799852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com