首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新绑定将POSIXct转换为字符--如何将其转换回POSIXct?

重新绑定将POSIXct转换为字符--如何将其转换回POSIXct?
EN

Stack Overflow用户
提问于 2020-06-30 18:30:40
回答 1查看 591关注 0票数 1

尽管使用了stringsASFactors = FALSE参数,但rbind()正在将我的POSIXct向量转换为类字符。我已经查看了关于cbind/rbind类型函数以及它们如何处理POSIXct的讨论(请参阅hereherehere),但不幸的是,它们在本例中没有帮助。

在这里,我创建POSIXct向量作为数据帧中行的基础。当我使用rbind() withing as.data.frame()并使用stringsASFactors = FALSE时,POSIXct值将更改为类字符。我知道转换类的是rbind()而不是as.data.frame(),而且似乎没有任何方法来防止这种情况发生。

虽然我熟悉各种日期时间结构,但我做了一些研究,我不知道它用来存储日期时间的系统是什么,也不知道如何将它转换回来(是的,我已经尝试过as.POSIXct())。

所以问题是,我如何将这些转换回POSIXct?(如果有什么神奇的方法让rbind()不将POSIXct转换为字符,我也会接受的。)谢谢!

代码语言:javascript
复制
####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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 19:16:27

如果您将s1、.、s5as.character()中包装在rbind()之前,它的行为似乎就像您想要的那样。

代码语言:javascript
复制
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)的Note部分。

"POSIXct“类的时间来源,‘1970-01-01 00:00.00 UTC’

代码语言:javascript
复制
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")
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62663972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档