【发布时间】:2019-11-28 15:27:35
【问题描述】:
我正在尝试创建一个新列,它是基于 TRUE 和 FALSE 列的条件差异。如果滞后 1 行是 FALSE,那么我们应该计算与开始或最后一个 TRUE 行的差异,以数据帧中较晚者为准,但是如果滞后 1 行是 TRUE,则应该重置差异。
我想尽可能多地使用 dplyr::mutate 函数。我正在尝试将 dplyr::lag 与 ifelse() 一起使用,但我很难适应这些条件
dat <- data.frame(logic_col = c(F, F, T, T, F, F, F, T, F),
time_col = c(200, 435, 567, 895, 1012, 1345, 1456, 1700, 1900),
expected_col_unseen = c(200, 435, 567, 328, 117, 450, 561, 805, 200))
【问题讨论】:
-
expected列与“累计和”不一致。由于第 2 行是错误的,因此预期的第 3 行应该是200+435+567=1202,而不是您所拥有的 1002。从那里开始,您的预期列似乎甚至没有接近,因为第 3 行是正确的,所以第 4 行应该是 895。我认为您可能正在尝试从预期中减去前一行的 time_col,但即便如此,累积总和不能正确结转。您能否修复您的预期数据或扩展您的计算方式? -
感谢您指出这一点。我将问题改写为更准确,我不是要进行累积总和,而是要计算差异。从最后一个 {TRUE} 值开始。
-
我同意你的第 1-5 行,但是由于第 5-6 行都是错误的,所以第 6 行不应该等于第 6 行 time_col 吗?
-
次要细节,但如果你使用
dplyr,我鼓励使用dplyr::if_else(副基地ifelse),因为它可以防止常见错误(保护你自己,所以说话)。