无法使用strptime()将字符列位置转换为datetime

时间:2013-11-04 21:53:53

标签: r

我有一个数据框(d),其中第二列是名为 event.date 的字符col。此列中的示例值为“2012-07-23 00:00:00”(日期时间数据) 我想将第二列转换为日期时间。我尝试了两件事:

1) d [,2]< - strptime(d [,2],“%Y-%m-%d%H:%M:%S” )
结果:警告消息: 在[<-.data.frame*tmp*,2,value = list(sec = c(0,0,0,:   提供了9个变量来替换1个变量。
head(d)显示event.date的值为0(不好)

2) d $ event.date&lt; - strptime(d $ event.date,“%Y-%m-%d%H:%M:%S” )
工作正常......我需要能够使用位置列表示法转换日期时间列。

对我做错了什么的想法?谢谢

str(d)看起来像:
'data.frame':826 obs。 6个变量:  
$ event.id:int 229162 129163 392564 392665 398466 355167 326168 397269 399170 399171 ...  
$ event.date:chr“2012-07-23 00:00:00”“2012-07-23 00:00:00”“2012-07-23 00:00:00”“2012-07 -23 00:00:00“......  
$严重性:因子w / 6级“清除”,“严重”,..:3 3 3 3 3 3 3 3 3 3 ...  
$ message.type:因子w / 37级“AC Power Lost”,..:4 4 4 4 4 4 4 4 4 15 ...  
$ message:chr“用户已从10.211.221.118登录到XX0852-036128。” “用户已成功登录  
$ entity.name:chr“XX0852-036633”“XX0902-037744”“XX0902-037A55”“XX0902-037D70”......

1 个答案:

答案 0 :(得分:0)

> d <- data.frame(foo = rbinom(2, 10, .3), event.date = c("1990-01-10 04:30:13", "1987-03-08 02:12:14"), tt = rpois(2, 42), stringsAsFactors = FALSE)
> d
  foo          event.date tt
1   4 1990-01-10 04:30:13 37
2   3 1987-03-08 02:12:14 41
> d[[2]] <- strptime(d[[2]], "%Y-%m-%d %H:%M:%S")
> d
  foo          event.date tt
1   4 1990-01-10 04:30:13 37
2   3 1987-03-08 02:12:14 41
> sapply(d, class)
$foo
[1] "integer"

$event.date
[1] "POSIXlt" "POSIXt" 

$tt
[1] "integer"

我真的不知道d[,2]d[2]d[[2]]之间的区别在于此示例。我只是从经验中知道这可以解决这个问题。您可以浏览[.data.frame[[.data.frame[<-.data.frame[[<-.data.frame的源代码。