【发布时间】:2018-04-23 19:50:50
【问题描述】:
我有一个包含实验开始和停止时间的数据框,我想计算每个实验的持续时间(每个实验一行)。数据框:
start_t stop_t
7:35 7:48
23:50 00:15
11:22 12:06
我创建了一个函数来将时间转换为 POSIX 格式并计算持续时间,测试开始和停止是否跨越午夜:
TimeDiff <- function(t1,t2) {
if (as.numeric(as.POSIXct(paste("2016-01-01", t1))) > as.numeric(as.POSIXct(paste("2016-01-01", t2)))) {
t1n <- as.numeric(as.POSIXct(paste("2016-01-01", t1)))
t2n <- as.numeric(as.POSIXct(paste("2016-01-02", t2)))
}
if (as.numeric(as.POSIXct(paste("2016-01-01", t1))) < as.numeric(as.POSIXct(paste("2016-01-01", t2)))) {
t1n <- as.numeric(as.POSIXct(paste("2016-01-01", t1)))
t2n <- as.numeric(as.POSIXct(paste("2016-01-01", t2)))
}
#calculate time-difference in seconds
t2n - t1n
}
然后我想使用“dplyr”中的“mutate”函数或“apply”函数将此函数应用于我的数据框,例如:
mutate(df, dur = TimeDiff(start_t, stop_t))
但结果是“dur”表填充了相同的值。我最终使用了一个笨重的 for 循环将我的函数应用于数据帧,但我想要一个更优雅的解决方案。需要帮助!
【问题讨论】:
-
根据你的问题
dur不是表格而是df数据框的一列 -
应该在时间字符串中添加日期,然后使用
difftime() -
您是否将
mutate结果分配给变量?还是只看输出?可以发一下吗?