[英]Split column of format YYYY-MM-DD HH:MM:SS to two (date object) columns YYYY-MM-DD and HH:MM:SS in R
我需要將時間和日期與具有time
列的data.frame分隔為2012-09-27 07:05:59 。 然后,我必須使用date
和time
列來提取特定日期/時間的數據。 我該怎么做呢? 可能我想做與此相反的事情 。
我嘗試使用strptime
函數和lubridate
包,但無法正常工作。
data1 <- structure(list(event.date = structure(list(sec = c(59, 29, 59,
0, 29, 59, 29, 29, 59, 59), min = c(5L, 7L, 15L, 17L, 17L, 19L,
21L, 22L, 22L, 23L), hour = c(7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L), mday = c(27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L,
27L), mon = c(8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L), year = c(112L,
112L, 112L, 112L, 112L, 112L, 112L, 112L, 112L, 112L), wday = c(4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), yday = c(270L, 270L, 270L,
270L, 270L, 270L, 270L, 270L, 270L, 270L), isdst = c(0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("sec", "min", "hour",
"mday", "mon", "year", "wday", "yday", "isdst"), class = c("POSIXlt",
"POSIXt"), tzone = c("CST", "GMT", " ")), VE = c(45L, 55L,
45L, 50L, 55L, 35L, 30L, 45L, 55L, 30L)), .Names = c("event.date",
"VE"), row.names = c(NA, 10L), class = "data.frame")
以下為我給出NA
:
as.Date(as.character(data1$event.date),"%HH:%MM:%SS")
我也無法成功使用lubridate
...
ymd_hms(as.character(data1$event.date))
我對應該使用哪種日期格式/軟件包感到困惑。
干得好:
R> data1$pt <- as.POSIXct(data1[,1]) # parse time from ISO string
R> data1$date <- as.Date(data1[,"pt"]) # transform to Date
R> data1$time <- format(data1[,"pt"], "%H:%M:%S") # transform to time string
R> data1
event.date VE pt date time
1 2012-09-27 07:05:59 45 2012-09-27 07:05:59 2012-09-27 07:05:59
2 2012-09-27 07:07:29 55 2012-09-27 07:07:29 2012-09-27 07:07:29
3 2012-09-27 07:15:59 45 2012-09-27 07:15:59 2012-09-27 07:15:59
4 2012-09-27 07:17:00 50 2012-09-27 07:17:00 2012-09-27 07:17:00
5 2012-09-27 07:17:29 55 2012-09-27 07:17:29 2012-09-27 07:17:29
6 2012-09-27 07:19:59 35 2012-09-27 07:19:59 2012-09-27 07:19:59
7 2012-09-27 07:21:29 30 2012-09-27 07:21:29 2012-09-27 07:21:29
8 2012-09-27 07:22:29 45 2012-09-27 07:22:29 2012-09-27 07:22:29
9 2012-09-27 07:22:59 55 2012-09-27 07:22:59 2012-09-27 07:22:59
10 2012-09-27 07:23:59 30 2012-09-27 07:23:59 2012-09-27 07:23:59
R>
這里是你的列類型,顯示出我改變POSIXlt
到POSIXct
與第一命令:
R> sapply(data1, class)
$event.date
[1] "POSIXlt" "POSIXt"
$VE
[1] "integer"
$pt
[1] "POSIXct" "POSIXt"
$date
[1] "Date"
$time
[1] "character"
R>
從評論中我的理解是,您獲得的數據實際上看起來像data2
。 使用原始數據,我們可以獲得具有"POSIXct"
類日期時間列, "Date"
類日期日期列和"character"
類時間列的"POSIXct"
:
data2 <- transform(data1,
event.date = factor(format(event.date, "%m/%d/%Y %H:%M:%S")))
data3 <- transform(data2,
event.date = as.POSIXct(event.date, format = "%m/%d/%Y %H:%M:%S"),
date = as.Date(event.date, format = "%m/%d/%Y"),
time = sub(".* ", "", event.date),
stringsAsFactors = FALSE)
或者,如果我們希望將它們全部用作角色,則可以改為:
data3a <- transform(data2,
event.date = as.character(as.POSIXct(event.date, format = "%m/%d/%Y %H:%M:%S")),
date = as.character(as.Date(event.date, format = "%m/%d/%Y")),
time = sub(".* ", "", event.date),
stringsAsFactors = FALSE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.