R 将日期时间列拆分为日期和时间变量
我有一个格式为“Y-m-d H:m:S”的“日期时间列”开始。我想将此列拆分为“日期”列和“时间”列 我尝试了以下方法:R 将日期时间列拆分为日期和时间变量,r,date,datetime,split,R,Date,Datetime,Split,我有一个格式为“Y-m-d H:m:S”的“日期时间列”开始。我想将此列拆分为“日期”列和“时间”列 我尝试了以下方法: df$Date <- sapply(strsplit(as.character(df$Start), " "), "[", 1) df$Time <- sapply(strsplit(as.character(df$Start), " "), "[", 2) 所以现在我只需要知道如何
df$Date <- sapply(strsplit(as.character(df$Start), " "), "[", 1)
df$Time <- sapply(strsplit(as.character(df$Start), " "), "[", 2)
所以现在我只需要知道如何将时间和日期从因子
转换为'time'和'date'。怎么样
df$Date <- as.Date(df$Start)
df$Time <- format(df$Start,"%H:%M:%S")
df$Date您可能更喜欢这样做,避免使用实际上并不必要的lappy
循环(但这也不是一件坏事!)
#如果我们有这些数据。。。
dfdf$Date通过查看列格式,我认为您可以使用as.POSIXct正确设置列格式,然后使用format()提取所需的数据
这是我在拆分DateTime列时使用的代码
df$Time <- format(as.POSIXct(df$Start,format="%Y:%m:%d %H:%M:%S"),"%H:%M:%S")
df$Date <- format(as.POSIXct(df$Start,format="%Y:%m:%d %H:%M:%S"),"%Y:%m:%d")
df$Time假设您的数据与此类似,有一列datetime
和许多其他列
df <- data.frame(a = 1:5, datetime = as.POSIXct(c('2019-02-01 01:00:00',
'2019-02-01 02:00:00', '2019-02-01 03:00:00',
'2019-02-01 04:00:00', '2019-02-01 05:00:00')))
df
# a datetime
#1 1 2019-02-01 01:00:00
#2 2 2019-02-01 02:00:00
#3 3 2019-02-01 03:00:00
#4 4 2019-02-01 04:00:00
#5 5 2019-02-01 05:00:00
如果我们想保留原始列(datetime
),我们可以添加remove=FALSE
,您可以在这个方法中使用它。它工作得很好
format(mdy(df_5star$Date4)
希望有帮助 如果您对非base
备选方案持开放态度,您可以使用data.table::IDateTime
来
接受日期-时间输入,并返回包含日期和时间列的数据表
…分别属于IDate
*和ITime
**类:
x = as.POSIXct("2013-09-01 08:07:41") + 0:2
IDateTime(x)
# idate itime
# 1: 2013-09-01 08:07:41
# 2: 2013-09-01 08:07:42
# 3: 2013-09-01 08:07:43
*IDate
是从date
派生的日期类。它的内部表示形式与Date
类相同,只是存储模式为整数
**ITime
是一个时间类,存储为一天中的整数秒数
使用sapply
而不是lapply
。当sapply
遇到一个“常规”结果时,它返回一个向量或矩阵lappy
总是运行一个列表。就是这样!谢谢!这给了我这个错误..:格式错误。默认值(结构为.character(x),names=names(x),dim=dim(x),:无效的'trim'参数如果您有df$Start类型为“character”,它不是时间戳。请使用类()要检查的函数。在应用上述函数之前,您应该将字符串转换为时间戳。谢谢,R将其作为一个因子来读取。我已经得到了一个包含日期的列,实际上该列的类为“Date”。但是,现在我正在与时间作斗争。我使用了:df$time strtime(as.character(df$Start),%Y-%m-%d%H:%m:%S)?尝试过这个,但现在它给我一个错误,即“参数‘格式’丢失,没有默认值”。。这似乎不起作用,但可能是因为R将其作为一个因子读入。谢谢!@JalouHuntjensas。character
应该解决这个问题。我示例中的数据也是因子
。您可以添加str吗(df)
到OP,这样我就可以看到它是什么样子了?@JalouHuntjens在你的数据上运行我的代码时出现了什么错误?它应该可以工作。它只会给我一个列表,其中包含以下内容:5259 48.88 1 13740310 2013-09-04 08:14:11.000。如果我使用str()然后它仍然将其视为一个因素,而且它不会分割行。我不知道我做错了什么。无论如何,非常感谢您的帮助!这可能需要更多的帮助才能成为一个好答案。问题要求同时创建日期列和时间列,但此答案只创建一个。此外,您缺少了一个)
,当使用base R中未包含的函数时(如mdy()
),您应该提到所需的包(lubridate
)。
df <- data.frame(a = 1:5, datetime = as.POSIXct(c('2019-02-01 01:00:00',
'2019-02-01 02:00:00', '2019-02-01 03:00:00',
'2019-02-01 04:00:00', '2019-02-01 05:00:00')))
df
# a datetime
#1 1 2019-02-01 01:00:00
#2 2 2019-02-01 02:00:00
#3 3 2019-02-01 03:00:00
#4 4 2019-02-01 04:00:00
#5 5 2019-02-01 05:00:00
tidyr::separate(df, datetime, c("date", "time"), sep = " ")
# a date time
#1 1 2019-02-01 01:00:00
#2 2 2019-02-01 02:00:00
#3 3 2019-02-01 03:00:00
#4 4 2019-02-01 04:00:00
#5 5 2019-02-01 05:00:00
format(mdy(df_5star$Date4)
x = as.POSIXct("2013-09-01 08:07:41") + 0:2
IDateTime(x)
# idate itime
# 1: 2013-09-01 08:07:41
# 2: 2013-09-01 08:07:42
# 3: 2013-09-01 08:07:43