rbind 将 POSIXct 转换为字符 - 如何转换回 POSIXct?
rbind converts POSIXct to character - How to convert back to POSIXct?
尽管使用了 stringsASFactors = FALSE 参数,rbind() 正在将我的 POSIXct 向量转换为 class 字符。我查看了关于 cbind/rbind 类型函数的讨论以及它们如何处理 POSIXct(参见 , here, and here),但不幸的是它们在这种情况下没有帮助。
我在这里创建 POSIXct 向量作为数据框中行的基础。当我使用带 as.data.frame() 的 rbind() 并使用 stringsASFactors = FALSE 时,POSIXct 值更改为 class 字符。我知道是 rbind() 而不是 as.data.frame() 正在转换 class 并且似乎没有任何方法可以防止这种情况发生。
虽然我熟悉各种日期时间结构,但我做了一些研究,但我不知道它使用什么系统来存储日期时间或如何将其转换回来(是的,我已经尝试过 as.POSIXct()).
所以问题是,如何将它们转换回 POSIXct? (如果有一些神奇的方法可以让 rbind() 不将 POSIXct 转换为字符,我也会采用它。)
谢谢!
####Build example####
d1 <- as.POSIXct("2020-06-30 8:00")
d2 <- as.POSIXct("2020-06-30 9:00")
d3 <- as.POSIXct("2020-06-30 10:00")
d4 <- as.POSIXct("2020-06-30 16:00")
s1 <- c(d1, d2, d3, d4, "", "")
d1 <- as.POSIXct("2020-06-30 8:00")
d2 <- as.POSIXct("2020-06-30 10:00")
d3 <- as.POSIXct("2020-06-30 11:00")
d4 <- as.POSIXct("2020-06-30 12:00")
d5 <- as.POSIXct("2020-06-30 12:30")
d6 <- as.POSIXct("2020-06-30 16:30")
s2 <- c(d1, d2, d3, d4, d5, d6)
d1 <- as.POSIXct("2020-06-30 8:00")
d2 <- as.POSIXct("2020-06-30 13:00")
d3 <- as.POSIXct("2020-06-30 13:45")
d4 <- as.POSIXct("2020-06-30 16:30")
s3 <- c(d1, d2, d3, d4, "", "")
d3 <- as.POSIXct("2020-06-30 13:25")
s4 <- c(d1, d2, d3, d4, "", "")
d2 <- as.POSIXct("2020-06-30 16:00")
s5 <- c(d1, d2, "", "", "", "")
####Build data frame####
timedata <- as.data.frame(rbind(s1, s2, s3, s4, s5), stringsAsFactors = FALSE)
names(timedata) <- c("T1", "T2", "T3", "T4", "T5", "T6")
for(c in seq(from = 1, to = 6, by = 1)) {
timedata[,c] <- as.POSIXct(timedata[,c], tzone = "PDT")
}
P.S。 as.POSIXct() 有一些文档讨论了如何将具有特定来源的乱码转换回功能性 POSIXct。但是示例使用的是 SAS、SPSS、STATA 和 Matlab 提供的不同结构,而不是内部 R。
如果您在 rbind()
之前将 s1
, ..., s5
包装在 as.character()
中,它的行为似乎如您所愿。
timedata <- as.data.frame(rbind(as.character(s1),
as.character(s2),
as.character(s3),
as.character(s4),
as.character(s5)), stringsAsFactors = FALSE)
然后你可以做你所做的并转换回来。
另一种选择是保持 rbind()
不变,然后按如下方式更改循环。这都归功于每个功能的支持类。
密钥隐藏在 help(as.POSIXct)
的注释部分。
the origin of time for the "POSIXct" class, ‘1970-01-01 00:00.00 UTC’
for(c in seq(from = 1, to = 6, by = 1)) {
timedata[,c] <- as.POSIXct(as.numeric(timedata[,c]), origin = "1970-01-01 00:00:00", tzone = "PDT")
}
尽管使用了 stringsASFactors = FALSE 参数,rbind() 正在将我的 POSIXct 向量转换为 class 字符。我查看了关于 cbind/rbind 类型函数的讨论以及它们如何处理 POSIXct(参见
我在这里创建 POSIXct 向量作为数据框中行的基础。当我使用带 as.data.frame() 的 rbind() 并使用 stringsASFactors = FALSE 时,POSIXct 值更改为 class 字符。我知道是 rbind() 而不是 as.data.frame() 正在转换 class 并且似乎没有任何方法可以防止这种情况发生。
虽然我熟悉各种日期时间结构,但我做了一些研究,但我不知道它使用什么系统来存储日期时间或如何将其转换回来(是的,我已经尝试过 as.POSIXct()).
所以问题是,如何将它们转换回 POSIXct? (如果有一些神奇的方法可以让 rbind() 不将 POSIXct 转换为字符,我也会采用它。) 谢谢!
####Build example####
d1 <- as.POSIXct("2020-06-30 8:00")
d2 <- as.POSIXct("2020-06-30 9:00")
d3 <- as.POSIXct("2020-06-30 10:00")
d4 <- as.POSIXct("2020-06-30 16:00")
s1 <- c(d1, d2, d3, d4, "", "")
d1 <- as.POSIXct("2020-06-30 8:00")
d2 <- as.POSIXct("2020-06-30 10:00")
d3 <- as.POSIXct("2020-06-30 11:00")
d4 <- as.POSIXct("2020-06-30 12:00")
d5 <- as.POSIXct("2020-06-30 12:30")
d6 <- as.POSIXct("2020-06-30 16:30")
s2 <- c(d1, d2, d3, d4, d5, d6)
d1 <- as.POSIXct("2020-06-30 8:00")
d2 <- as.POSIXct("2020-06-30 13:00")
d3 <- as.POSIXct("2020-06-30 13:45")
d4 <- as.POSIXct("2020-06-30 16:30")
s3 <- c(d1, d2, d3, d4, "", "")
d3 <- as.POSIXct("2020-06-30 13:25")
s4 <- c(d1, d2, d3, d4, "", "")
d2 <- as.POSIXct("2020-06-30 16:00")
s5 <- c(d1, d2, "", "", "", "")
####Build data frame####
timedata <- as.data.frame(rbind(s1, s2, s3, s4, s5), stringsAsFactors = FALSE)
names(timedata) <- c("T1", "T2", "T3", "T4", "T5", "T6")
for(c in seq(from = 1, to = 6, by = 1)) {
timedata[,c] <- as.POSIXct(timedata[,c], tzone = "PDT")
}
P.S。 as.POSIXct() 有一些文档讨论了如何将具有特定来源的乱码转换回功能性 POSIXct。但是示例使用的是 SAS、SPSS、STATA 和 Matlab 提供的不同结构,而不是内部 R。
如果您在 rbind()
之前将 s1
, ..., s5
包装在 as.character()
中,它的行为似乎如您所愿。
timedata <- as.data.frame(rbind(as.character(s1),
as.character(s2),
as.character(s3),
as.character(s4),
as.character(s5)), stringsAsFactors = FALSE)
然后你可以做你所做的并转换回来。
另一种选择是保持 rbind()
不变,然后按如下方式更改循环。这都归功于每个功能的支持类。
密钥隐藏在 help(as.POSIXct)
的注释部分。
the origin of time for the "POSIXct" class, ‘1970-01-01 00:00.00 UTC’
for(c in seq(from = 1, to = 6, by = 1)) {
timedata[,c] <- as.POSIXct(as.numeric(timedata[,c]), origin = "1970-01-01 00:00:00", tzone = "PDT")
}