【发布时间】:2020-10-21 03:24:25
【问题描述】:
尽管使用了 stringsASFactors = FALSE 参数,rbind() 正在将我的 POSIXct 向量转换为类字符。我查看了有关 cbind/rbind 类型函数以及它们如何处理 POSIXct 的讨论(请参阅 here、here 和 here),但不幸的是它们在这种情况下没有帮助。
在这里,我创建 POSIXct 向量作为数据框中行的基础。当我使用 rbind() withing as.data.frame() 并使用 stringsASFactors = FALSE 时,POSIXct 值更改为类字符。我知道是 rbind() 而不是 as.data.frame() 正在转换类,似乎没有任何方法可以防止这种情况发生。
虽然我熟悉各种日期时间结构,但我做了一些研究,但我不知道它使用什么系统来存储日期时间或如何将其转换回来(是的,我已经尝试过 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")
}
附: as.POSIXct() 有一些文档,其中讨论了如何将具有特定来源的乱码转换回功能性 POSIXct。但是这些示例使用的是 SAS、SPSS、STATA 和 Matlab 提供的不同结构,而不是内部 R。
【问题讨论】:
-
rbind函数产生一个矩阵,所以所有列都是相同的类型,POSIXct不是可能的类型之一:参见?rbind。最好创建一个字符串矩阵,然后将每一列最后转换为POSIXct。
标签: r dataframe character posixct rbind