我有一个简单的数据框。我想从中添加另一列记录时间(小时和分钟,24 小时制)。然后我将针对变量绘制此列。由于日期都一样,我只对时间感兴趣。这是我到目前为止所尝试的。
a <- c(1:6)
b <- c("05/12/2012 05:00","05/12/2012 06:55","05/12/2012 07:10",
"05/12/2012 10:23", "05/12/2012 11:43","05/12/2012 13:04")
c <-c("0","0","0","1","1","1")
df1 <- data.frame(a,b,c,stringsAsFactors = FALSE)
a <- df1$a
b <- strptime(df1$b, "%d/%m/%Y %H:%M")
c <- as.numeric(df1$c)
hour <- as.numeric(format(b, "%H"))
min <- as.numeric(format(b, "%M"))
date <- format(b, "%x")
time <- hour + min
df2 <- data.frame(a, b, c, hour, min, date, time)
我被告知 here通过将数字分开,转换为类似的单位,然后添加来手动转换分钟和小时。但是我很挣扎,因为早上 5 点只是被导入为 5。
如果有人能建议我如何正确地做到这一点,我将不胜感激。
最佳答案
有许多用于日期和时间的转换工具,以及一整套要使用的包。我喜欢与 POSIXlt
一起工作在这种情况下,因为您可以通过从列表中提取它们来提取您需要的任何信息。
例如:
a <- c(1:6)
b <- c("05/12/2012 05:00","05/12/2012 06:55","05/12/2012 07:10",
"05/12/2012 10:23", "05/12/2012 11:43","05/12/2012 13:04")
c <-c("0","0","0","1","1","1")
df1 <- data.frame(a,b,c,stringsAsFactors = FALSE)
df2 <- within(df1,{
posb <- as.POSIXlt(b,format="%d/%m/%Y %H:%M")
hours <- posb$hour
mins <- posb$min
dates <- format(posb, "%x")
time <- format(posb, "%H:%M")
posb <- NULL # cleanup
})
这使 :
> df2
a b c time dates mins hours
1 1 05/12/2012 05:00 0 05:00 12/5/2012 0 5
2 2 05/12/2012 06:55 0 06:55 12/5/2012 55 6
3 3 05/12/2012 07:10 0 07:10 12/5/2012 10 7
4 4 05/12/2012 10:23 1 10:23 12/5/2012 23 10
5 5 05/12/2012 11:43 1 11:43 12/5/2012 43 11
6 6 05/12/2012 13:04 1 13:04 12/5/2012 4 13
有关更多信息,另请参阅:
?POSIXlt
有关 POSIXt 类的更多信息 ?format
有关格式选项的更多信息 ?strptime
有关格式选项和转换为字符的更多信息 lubridate
package用于替代功能 timeDate
package更多替代功能 关于r - R中一列中的小时和分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14775313/