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

标签 r

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/

相关文章:

r - 列表迭代使 R 崩溃

IE10 上的 R Shiny 页面

python - Python 和 R 之间的线性回归系数之间的差异

r - 我正在尝试使用 Ubuntu 18.04 在 R 中安装 openssl 包但没有成功

c++ - 使用提供的 R 函数使用 gsl_function

r - 以 png 格式保存高分辨率绘图

mysql - 尝试使用 RODBC 将 R 连接到 MySQL 时出错

r - 在ggmap中绘制GPS坐标

r - 如何使用 "cols()"和 "col_double"将逗号作为小数点

从 numericInput() 中删除向上/向下箭头 R Shiny