R-时间变量和日期的条件操作
假设,我有下面的数据框,希望对最后一个变量R-时间变量和日期的条件操作,r,datetime,dataframe,dplyr,R,Datetime,Dataframe,Dplyr,假设,我有下面的数据框,希望对最后一个变量HMS执行一些操作。 目的是创建一个新变量,比如说TimeStampNew,如果观察时间在当天的17:30:00之后,则指定第二天。当观察结果显示无值('NA')时,则应使用相同日期的时间戳 问题是,要将HMS-变量从类字符转换为允许条件的格式。我已经检查了chron包,或者将其转换为类型为POSIXct的对象作为可能的替代 我在这篇文章中已经问了一个类似的问题:。 我已经试着用dplyr包的一些操作来解决这个问题,正如上面提到的帖子所建议的那样。然而,
HMS
执行一些操作。
目的是创建一个新变量,比如说TimeStampNew
,如果观察时间在当天的17:30:00
之后,则指定第二天。当观察结果显示无值('NA'
)时,则应使用相同日期的时间戳
问题是,要将HMS
-变量从类字符转换为允许条件的格式。我已经检查了chron包,或者将其转换为类型为POSIXct
的对象作为可能的替代
我在这篇文章中已经问了一个类似的问题:。
我已经试着用dplyr
包的一些操作来解决这个问题,正如上面提到的帖子所建议的那样。然而,由于复杂的时间格式,我没有收到想要的解决方案
有人提出这个问题的解决方案吗
提前谢谢
TimeStamp HMS
1 2010-02-22 19:55:00
2 2012-10-10 07:53:00
3 2012-10-24 07:55:00
4 2013-07-15 08:14:00
5 2013-07-24 08:23:00
6 2013-12-02 10:00:00
7 2012-02-23 07:56:00
8 2012-03-06 08:45:00
9 2013-09-15 19:54:00
10 2007-03-28 NA
11 2007-08-09 NA
12 2008-08-07 NA
使用difftime
和ifelse
语句:
df1$TimeStamp <- as.Date(df1$TimeStamp, format = "%Y-%m-%d")
df1$TimeStampNew <- ifelse(
difftime(as.POSIXct(df1$HMS, format = "%H:%M:%S"),
as.POSIXct("17:30:00", format = "%H:%M:%S")) > 0,
as.character(df1$TimeStamp + 1),
as.character(df1$TimeStamp))
df1$TimeStampNew[is.na(df1$HMS)] <- as.character(df1$TimeStamp[is.na(df1$HMS)])
df1$TimeStamp使用difftime
和ifelse
语句:
df1$TimeStamp <- as.Date(df1$TimeStamp, format = "%Y-%m-%d")
df1$TimeStampNew <- ifelse(
difftime(as.POSIXct(df1$HMS, format = "%H:%M:%S"),
as.POSIXct("17:30:00", format = "%H:%M:%S")) > 0,
as.character(df1$TimeStamp + 1),
as.character(df1$TimeStamp))
df1$TimeStampNew[is.na(df1$HMS)] <- as.character(df1$TimeStamp[is.na(df1$HMS)])
df1$TimeStamp假设DF
如末尾注释所示。特别是时间戳
和HMS
都假定为字符列<代码>时间戳
也可以是“日期”
类列
如果HMS
超过17:30,则以下代码将HMS
列中的NA
值替换为00:00“
,并将时间戳添加1天(将其转换为日期”
类)
transform(DF, Date =
as.Date(TimeStamp) + (replace(HMS, is.na(HMS), "00:00:00") > "17:30:00"))
在新的Date
列属于“Date”
类的情况下给出此数据框
假设DF
,如末尾注释所示。特别是时间戳
和HMS
都假定为字符列<代码>时间戳
也可以是“日期”
类列
如果HMS
超过17:30,则以下代码将HMS
列中的NA
值替换为00:00“
,并将时间戳添加1天(将其转换为日期”
类)
transform(DF, Date =
as.Date(TimeStamp) + (replace(HMS, is.na(HMS), "00:00:00") > "17:30:00"))
在新的Date
列属于“Date”
类的情况下给出此数据框
类似于时间戳+(!is.na(HMS)&HMS>“17:30:00”)
?您的示例不容易复制,因此我不测试代码。类似于TimeStamp+(!is.na(HMS)&HMS>“17:30:00”)
?你的例子不容易复制,所以我不测试代码。谢谢!很好用!语法的最后一行我改为df1$TimeStampNew[is.na(df1$TimeStampNew)]谢谢!很好用!语法中的最后一行我改为df1$TimeStampNew[is.na(df1$TimeStampNew)]
Lines <- "
TimeStamp HMS
1 2010-02-22 19:55:00
2 2012-10-10 07:53:00
3 2012-10-24 07:55:00
4 2013-07-15 08:14:00
5 2013-07-24 08:23:00
6 2013-12-02 10:00:00
7 2012-02-23 07:56:00
8 2012-03-06 08:45:00
9 2013-09-15 19:54:00
10 2007-03-28 NA
11 2007-08-09 NA
12 2008-08-07 NA"
DF <- read.table(text = Lines, as.is = TRUE)