ttable[,c(-6ren">
gpt4 book ai didi

r - 如何将数据框的字符列转换为 Posixlt 类型

转载 作者:行者123 更新时间:2023-12-04 05:48:41 25 4
gpt4 key购买 nike

data.frame 的列之一是“字符”
例如:2012 年 3 月 31 日晚上 9:56:53

/> class(columnName)  
[1] "character"

/>ttable[,c(3)] <- as.POSIXlt(ttable[,c(3)],tz="GMT", format="%H:%M:%S %p %m/%d/%Y")

/>class(columnName)
[1] "numeric"

我希望它是 posixlt 但结果是数字。如何使它成为 posixlt ?

如果我对列的实际值应用相同的指令,它会按预期工作吗?
/> dd <- as.POSIXlt("9:56:53 PM 3/31/2012",tz="GMT", format="%H:%M:%S %p %m/%d/%Y")  

/> class(dd)
[1] "POSIXlt" "POSIXt"

最佳答案

首先,让我们创建一些数据并复制您的问题。请注意您没有提到的警告:

ttable <- data.frame(x=1:2, y=1:2, z="9:56:53 PM 3/31/2012",
stringsAsFactors = FALSE)
ttable
# x y z
# 1 1 1 9:56:53 PM 3/31/2012
# 2 2 2 9:56:53 PM 3/31/2012
ttable[, c(3)] <- as.POSIXlt(ttable[,c(3)], tz="GMT",
format="%H:%M:%S %p %m/%d/%Y")
# Warning message:
# In `[<-.data.frame`(`*tmp*`, , c(3), value = list(sec = c(53, 53 :
# provided 9 variables to replace 1 variables
sapply(ttable, class)
# x y z
# "integer" "integer" "numeric"

正如@joran 向我们指出的 ?DateTimeClasses ,问题是 as.POSIXlt返回长度为 9(秒、分钟、小时等)的向量列表。不能分配此列表来代替 ttable[,c(3)]因为它当前的“宽度”是 1。相反,整个 data.frame 列(或列表元素)必须通过 ttable[[3]] 重新分配。或 ttable$z :
ttable <- data.frame(x=1:2, y=1:2, z="9:56:53 PM 3/31/2012",
stringsAsFactors = FALSE)
ttable[[3]] <- as.POSIXlt(ttable[,c(3)], tz="GMT",
format="%H:%M:%S %p %m/%d/%Y")
sapply(ttable, class)
# $x
# [1] "integer"
#
# $y
# [1] "integer"
#
# $z
# [1] "POSIXlt" "POSIXt"

将列表分配为 data.frame 的列并不是一件很常见的事情。这个类似的例子可能有帮助:
ttable[, 1] <- list(a = 1:3, b = 3:1)
# Warning messages: [...]
ttable$x <- list(a = 1:3, b = 3:1)
# x y z
# 1 1, 2, 3 1 2012-03-31 09:56:53
# 2 3, 2, 1 2 2012-03-31 09:56:53

关于r - 如何将数据框的字符列转换为 Posixlt 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10368524/

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