R 在一列时间戳上使用difftime计算运行时间差
如何计算连续两行时间戳的时差(以分钟为单位),并将结果添加到新列中 我试过这个:R 在一列时间戳上使用difftime计算运行时间差,r,difftime,R,Difftime,如何计算连续两行时间戳的时差(以分钟为单位),并将结果添加到新列中 我试过这个: data$hours <- as.numeric(floor(difftime(timestamps(data), (timestamps(data)[1]), units="mins"))) 与[1]一起使用的代码始终引用时间戳向量的第一个元素 要想做你想做的,你需要看除第一个元素之外的所有元素减去除最后一个元素之外的所有元素 mytimes <- data.frame(timestamps=c("
data$hours <- as.numeric(floor(difftime(timestamps(data), (timestamps(data)[1]), units="mins")))
与[1]一起使用的代码始终引用时间戳向量的第一个元素 要想做你想做的,你需要看除第一个元素之外的所有元素减去除最后一个元素之外的所有元素
mytimes <- data.frame(timestamps=c("2013-06-23 00:00:00",
"2013-06-23 01:00:00",
"2013-06-23 02:00:00",
"2013-06-23 04:00:00"),
mins=NA)
mytimes$mins <- c(NA, difftime(mytimes$timestamps[-1],
mytimes$timestamps[-nrow(mytimes)],
units="mins"))
此代码的作用是:
设置数据帧,使时间戳和分钟的长度保持相同。
在该数据框中,输入您拥有的时间戳和您还没有任何分钟的事实,即NA。
选择除时间戳mytimes$timestamps[-1]的第一个元素以外的所有元素
选择timestamps mytimes$timestamps[-nrowmytimes]的最后一个元素以外的所有元素
用difftime减去它们,因为它们的格式很好,所以不必首先使它们成为以分钟为单位的POSIXct对象。单位=分钟
将NA放在前面,因为您的差异比cNA少一行。。。
将所有这些内容放回原始数据帧的分钟列mytimes$mins另一个选项是使用此方法计算:
# create some data for an MWE
hrs <- c(0,1,2,4)
df <- data.frame(timestamps = as.POSIXct(paste("2015-12-17",
paste(hrs, "00", "00", sep = ":"))))
df
# timestamps
# 1 2015-12-17 00:00:00
# 2 2015-12-17 01:00:00
# 3 2015-12-17 02:00:00
# 4 2015-12-17 04:00:00
# create a function that calculates the lag for n periods
lag <- function(x, n) c(rep(NA, n), x[1:(length(x) - n)])
# create a new column named mins
df$mins <- as.numeric(df$timestamps - lag(df$timestamps, 1)) / 60
df
# timestamps mins
# 1 2015-12-17 00:00:00 NA
# 2 2015-12-17 01:00:00 60
# 3 2015-12-17 02:00:00 60
# 4 2015-12-17 04:00:00 120
我建议您发布一些样本数据,以使您的示例具有可复制性。您的代码暗指使用difftime,我在计算差值时会使用difftime。跨越成对的值将是一个索引问题。然后,您可以对结果执行任何想要的操作。另外,请看哪些内容涉及到类似的问题。谢谢大家。再一次通往罗马的路很多:-简单又容易!解决了我的问题:谢谢大卫。
# create some data for an MWE
hrs <- c(0,1,2,4)
df <- data.frame(timestamps = as.POSIXct(paste("2015-12-17",
paste(hrs, "00", "00", sep = ":"))))
df
# timestamps
# 1 2015-12-17 00:00:00
# 2 2015-12-17 01:00:00
# 3 2015-12-17 02:00:00
# 4 2015-12-17 04:00:00
# create a function that calculates the lag for n periods
lag <- function(x, n) c(rep(NA, n), x[1:(length(x) - n)])
# create a new column named mins
df$mins <- as.numeric(df$timestamps - lag(df$timestamps, 1)) / 60
df
# timestamps mins
# 1 2015-12-17 00:00:00 NA
# 2 2015-12-17 01:00:00 60
# 3 2015-12-17 02:00:00 60
# 4 2015-12-17 04:00:00 120