数据框:
Number Time
1 10:25:00
2 10:35:15
3 10:42:26
对于数据框中的每个数字,我想减去时间,例如:
Number 1 = 10:25:00 - 10:35:15
Number 2 = 10:35:15 - 10:42:26
我的代码:
for (i in df$Number) {
for (j in df$Time) {
subtime <- df$Time[j] - df$Time[j+1]
}
}
此代码仅导致NA
答案 0 :(得分:0)
由于在每个循环中都重新分配了subtime
,所以在循环结束时仅返回最后一个值。此外,在最后一次迭代中,j == length(df$Time)
超出了j + 1
的范围,因此df$Time[j + 1]
将为NA,这意味着整个结果为NA。
通常,您可以执行以下操作:
df$subtime <- c(NA, diff(df$Time))
其中NA是第一个实例,并由第一个实例的合适默认值替换。您的案件可能需要进一步的治疗,具体取决于df$Time
的类别。
(如果您需要进一步的帮助,则应考虑创建数据的MWE。您提供的内容非常接近,但不足以为我们提供帮助。) < / p>
答案 1 :(得分:0)
我认为您可能正在寻找类似的东西。结果以小时为单位。
例如:10:25:00-10:35:15 =-00:10:15 =-(10/60)-(15/3600)= -0.1708333
a = data.frame(Number = c(1, 2, 3), Time = c("10:25:00", "10:35:15", "10:42:26"), stringsAsFactors = FALSE)
x = 2
timeDiff = function(x, a){
as.difftime(a[x, 2]) - as.difftime(a[x+1, 2])
}
result = sapply(2:nrow(a), timeDiff, a)
result
请注意,情况Number 3
不可能计算出这样的差异,因为第四行是必需的,并且您提供的数据帧只有3行。
根据Stack Overflow的提示,我可以看到您是新用户,因此,对于以后的嵌套for循环,我建议您探索sapply或lapply,因为这将使您的代码看起来更简洁,更易于维护。
如果您需要任何进一步的说明,请随时评论我的答案。 :-)