R语言如何计算dataframe中前一阶段结束时间与后一阶段开始时间的差值
解法
你要实现的是当前行StartTime减去上一行EndTime的计算,无需编写循环,R有更简洁的实现方式:
使用dplyr包(推荐写法)
借助dplyr的lag()偏移函数可以直接获取上一行的列值:
# 先安装并加载dplyr包 # install.packages("dplyr") library(dplyr) test <- test %>% mutate(gap_sec = as.numeric(difftime(StartTime, lag(EndTime), units = "sec")))
运行后新增的gap_sec列第一行是NA(第一个阶段没有上一阶段的结束时间),第二行对应103阶段和102阶段的间隔,也就是你示例中的36秒,后续行依次对应各阶段和上一阶段的时间差。
基础R写法(无需额外安装包)
直接通过索引截取对应位置的数值做差即可:
n <- nrow(test) test$gap_sec <- c(NA, as.numeric(difftime(test$StartTime[-1], test$EndTime[-n], units = "sec")))
这里test$StartTime[-1]是取第2行到最后一行的开始时间,test$EndTime[-n]是取第1行到倒数第二行的结束时间,刚好一一对应做差,前面补NA就可以和原数据行数对齐。
补充说明:你之前的测试代码结果异常是因为difftime的参数顺序写反了,difftime第一个参数是晚的时间,第二个参数是早的时间,调整顺序即可得到正数的时间差。
内容的提问来源于stack exchange,提问作者new2data
相关产品推荐
相关产品推荐

