如何创建一个新的;时差“;R表中开始和结束时间列中的列
我得到了一份要分析的数据表。 我有一个包含开始时间的列和一个包含完成时间的列,以3或4位数字表示,例如:下午3:40是1540,上午7:25是725 如何在表中获得具有这些时间差(以分钟为单位)的新列? 参赛作品超过2000件 谢谢你的帮助如何创建一个新的;时差“;R表中开始和结束时间列中的列,r,time,R,Time,我得到了一份要分析的数据表。 我有一个包含开始时间的列和一个包含完成时间的列,以3或4位数字表示,例如:下午3:40是1540,上午7:25是725 如何在表中获得具有这些时间差(以分钟为单位)的新列? 参赛作品超过2000件 谢谢你的帮助 structure(list(schedtime = c(1455L, 1640L, 1245L, 1715L, 1039L, 840L), deptime = c(1455L, 1640L, 1245L, 1709L, 1035L, 839L), di
structure(list(schedtime = c(1455L, 1640L, 1245L, 1715L, 1039L,
840L), deptime = c(1455L, 1640L, 1245L, 1709L, 1035L, 839L),
distance = c(184L, 213L, 229L, 229L, 229L, 228L), flightnumber =
c(5935L,
6155L, 7208L, 7215L, 7792L, 7800L), weather = c(0L, 0L, 0L,
0L, 0L, 0L), dayweek = c(4L, 4L, 4L, 4L, 4L, 4L), daymonth = c(1L,
1L, 1L, 1L, 1L, 1L)), row.names = c(NA, 6L), class = "data.frame")
这是数据集的一个示例(我不确定为什么每个数字后面都有L,表中没有显示)。我想要以分钟为单位的deptime(finish)-schedtime(start)
给定新列,有两个值在午夜之前具有schedtime,在午夜之后具有deptime,例如schedtime 2120和deptime 0010。答案是-1270,考虑到这是一个非常早的离开。如何将其更改为+170,即晚点出发?
datdat您可以使用library lubridate查找分钟内的差异。希望这有帮助。lubridate为时间相关数据提供了非常好的功能
dat <- data.frame(c(1540,1820,1330,545,100),c(1850,2150,2325,1330,101))
60*(floor(dat[,2]/100) - floor(dat[,1]/100)) - dat[,1] %% 100 + dat[,2] %% 100
library(lubridate)
df$deptime_new <- minutes(df$deptime-df$schedtime)
库(lubridate)
df$deptime_new您可以使用库lubridate以分钟为单位查找差异。希望这有帮助。lubridate为时间相关数据提供了非常好的功能
library(lubridate)
df$deptime_new <- minutes(df$deptime-df$schedtime)
库(lubridate)
df$deptime_新更大数据集的有效方法-
data.table::setDT(dt)[,time_diff:=minutes(deptime-schedtime)]
> dt
schedtime deptime distance flightnumber weather dayweek daymonth time_diff
1: 1455 1455 184 5935 0 4 1 0S
2: 1640 1640 213 6155 0 4 1 0S
3: 1245 1245 229 7208 0 4 1 0S
4: 1715 1709 229 7215 0 4 1 -6M 0S
5: 1039 1035 229 7792 0 4 1 -4M 0S
6: 840 839 228 7800 0 4 1 -1M 0S
编辑-(处理1730-1600=130分钟(实际上是90分钟)这样的情况)
大数据集的有效方法-
data.table::setDT(dt)[,time_diff:=minutes(deptime-schedtime)]
> dt
schedtime deptime distance flightnumber weather dayweek daymonth time_diff
1: 1455 1455 184 5935 0 4 1 0S
2: 1640 1640 213 6155 0 4 1 0S
3: 1245 1245 229 7208 0 4 1 0S
4: 1715 1709 229 7215 0 4 1 -6M 0S
5: 1039 1035 229 7792 0 4 1 -4M 0S
6: 840 839 228 7800 0 4 1 -1M 0S
编辑-(处理1730-1600=130分钟(实际上是90分钟)这样的情况)
我有相同的查询,是否有方法计算列中的时间差并以分钟显示新列中的答案我有相同的查询,是否有方法计算列中的时间差并以分钟显示新列中的答案请使用gdput
预期输出是什么?请使用样本数据更新您的问题,使用dput
预期输出是什么?由此我得到错误:类型为“closure”的对象不是子附件这给出了错误的答案,例如1730-1600=130分钟,但实际上这是90分钟。由此我得到错误:obje类型为“closure”的ct不是子附件。这给出了不正确的答案,例如1730-1600=130分钟,但实际上这是90分钟。是否有方法计算列中的is并使用答案创建一个新列?是否有方法计算列中的is并使用答案创建一个新列?数据错误。table::setDT(dt):无法通过引用将“dt”转换为data.table,因为绑定已锁定。“dt”很可能位于包(或环境)中已锁定以防止修改其变量绑定。请尝试将对象复制到当前环境,例如:var oh您可以删除dt并重新启动R会话,或者您可以将dt
复制到新对象,如dt\u copy复制函数需要下载哪个包?这是来自数据的函数。table
packagedu installdata.table
package?数据中有错误。table::setDT(dt):无法通过引用将“dt”转换为data.table,因为绑定已锁定。很可能“dt”位于包(或环境)中已锁定以防止修改其变量绑定。请尝试将对象复制到当前环境,例如:var oh您可以删除dt并重新启动R会话,或者您可以将dt
复制到新对象,如dt\u copy复制函数需要下载哪个包?这是来自数据的函数。table
packagedu installdata.table
package?请使用注释部分,因为这不是答案。请使用注释部分,因为这不是答案。