我有一个包含加速度和时间列的数据集。在excel
中,我可以使用它们来创建速度度量。但是,我似乎无法在R
中复制公式,因为第一步涉及将一个单元格添加到数据中的前一个单元格。
在Excel中,公式为H5 = H4+(G5*(B5-B4))
,它计算两次读数之间的时间差(B5-B4
),将结果乘以加速度(G5*(B5-B4)
),然后将结果与起始速度相加值始终为零。
前两个步骤很好,但是我还没有找到如何复制第三个步骤
data %>%
mutate(
Time_diff = Time - lag(Time),
Accel_Time = Accel*Time_diff
)
这里也是具有预期速度列的数据集,由于前100个左右的行的速度读数为零,因此我在这里略微跳过了数据。
> dput(head(data1, 20))
structure(list(Time = c(1.002, 1.004, 1.006, 1.008, 1.01, 1.012,
1.014, 1.016, 1.018, 1.02, 1.022, 1.024, 1.026, 1.028, 1.03,
1.032, 1.034, 1.036, 1.038, 1.04), Accel = c(-0.04, -0.04, -0.05,
-0.05, -0.04, -0.04, -0.05, -0.05, -0.05, -0.05, -0.05, -0.06,
-0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.07, -0.06),
Velocity = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
Time_diff = c(NA, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,
0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002),
Accel_Time = c(NA, -0.0000800000000000001, -0.0001, -0.0001,
-0.0000800000000000001, -0.0000800000000000001, -0.0001, -0.0001,
-0.0001, -0.0001, -0.0001, -0.00012, -0.00012, -0.00012, -0.00012, -0.00012, -0.00012, -0.00012, -0.00014, -0.00012)),
row.names = c(NA, 20L), class = "data.frame")
对此有任何建议,谢谢
答案 0 :(得分:3)
构建示例数据框:
data1 <- data.frame(Time = c(1.002, 1.004, 1.006, 1.008, 1.01, 1.012, 1.014, 1.016, 1.018, 1.02, 1.022, 1.024, 1.026, 1.028, 1.03, 1.032, 1.034, 1.036, 1.038, 1.04), Accel = c(-0.04, -0.04, -0.05, -0.05, -0.04, -0.04, -0.05, -0.05, -0.05, -0.05, -0.05, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.07, -0.06))
data1$Time_diff <- c(0,data1$Time[-1] - data1$Time[-length(data1$Time)])
accel_time
: data1$accel_time <- data1$Time_diff * data1$Accel
data1$velocity <- cumsum(data1$accel_time)
一个衬垫:
cumsum(c(0,data1$Time[-1] - data1$Time[-length(data1$Time)]) * data1$Accel)