去除日期和时间,以便您拥有每个数字组件



我目前将日期存储为以下格式的因素:"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.POSIXctstrptime将日期时间转换为标准格式

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了解格式选项。

最新更新