我目前将日期存储为以下格式的因素:"01_03_2018 08-30-09"
我希望将每个组件剥离为数值(在 R 代码中(。
所以上面的日期将是
day = 1
month = 3
year = 2018
hour = 8
minutes = 30
seconds = 9
注意:所有这些值都需要采用数字格式。
任何帮助,不胜感激。
用lubridate
包中的dmy_hms()
包装变量可以产生你想要的东西。软件包中这些功能的优点是引用 RDocumentation
这些函数可识别任意非数字分隔符以及无分隔符。只要格式顺序正确,即使输入向量包含不同格式的日期,这些函数也会正确分析日期。
library(lubridate)
x <- "01_03_2018 08-30-09"
# dmy_hms specifies the order as day, month, year, hour, minute, second
y <- dmy_hms(x)
day(y)
# 1
month(y)
#3
year(y)
#2018
hour(y)
#8
minute(y)
#30
second(y)
#9
你可以强迫他们到你喜欢的类型。但是,如果默认类型已在默认类型中,则可能需要使用typeof()
检查默认类型。
如果我们使用strptime
转换为POSIXlt
,所有这些信息都可以提取
lst1<- unclass(strptime(str1, format = "%d_%m_%Y %H-%M-%S"))
lst1$year <- lst1$year + 1900
lst1[c("mday", "mon", "year", "hour", "min", "sec")]
数据
str1 <- "01_03_2018 08-30-09"
要不使用外部库,您可以执行以下操作:
dat="01_03_2018 08-30-09"
tmp=gsub(" ","_",dat)
tmp=gsub("-","_",tmp)
vect=as.numeric(strsplit(tmp,"_")[[1]])
gsub()
执行一些替换,仅将下划线作为分隔符,因此strplit()
切断字符串。最后,将其转换为带有as.numeric()
的数值。
向量vect
包含最终数据。
在基本 R 中,可以使用as.POSIXct
或strptime
将日期时间转换为标准格式
datetime <- as.POSIXct("01_03_2018 08-30-09", format = "%d_%m_%Y %H-%M-%S")
现在我们可以使用format
并获取相应的组件。
day <- as.integer(format(datetime, "%d"))
month <- as.integer(format(datetime, "%m"))
year <- as.integer(format(datetime, "%Y"))
hour <- as.integer(format(datetime, "%H"))
minute <- as.integer(format(datetime, "%M"))
second <- as.integer(format(datetime, "%S"))
阅读?strptime
了解格式选项。