我有两个数据帧,格式相同,其中 DF1 中的 NA 值应施加到 DF2 上,而 DF2 中的所有其他值保持不变。
下面的示例,使用代码来重现两个 DF 和下面所需的结果 DF:
structure(list(ID = c(100, 101, 102, 103), c1 = c(NA, NA, NA,
"Y"), c2 = c("Y", NA, NA, "Y"), c3 = c("Y", "Y", "Y", NA), c4 = c(NA,
NA, NA, NA), c5 = c(NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-4L))
structure(list(ID = c(100, 101, 102, 103), c1 = c(0, 0, 0, NA
), c2 = c(1, 0, 0, 0), c3 = c(0, 0, 0, …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,其中包含一列,其中前一行和当前行之间存在时间差(以小时为单位)。这些行本身就是一个长序列。
我想要对数据帧进行子集化,以便时间差异是规则的 (16 小时),并删除不属于 16 小时“步骤”的行。然而,在计算中不应该仅仅跳过NA时间差(例如,时间差为8、8的行一起是16小时的步长,但具有8、NA、8的三行则不是)。相反,应从此 NA 开始重新计算 16 小时的时间差。
因此,如果一个或多个时间差为 4 或 8 小时,但加起来不能减少到 16 小时的单个步骤,则各个值也应变为 NA,请参见下文。
当第1-3行或1-4行之间形成16小时的步长时,应分别删除第2行或2-3行。
不幸的是,之前提供的答案似乎不适用于我的数据,输出中仅保留了“16h 步骤”的一小部分。我在下面提供了一个新示例,因为我的示例可能不具有代表性,以及给我的代码
输入:
test
ID Datetime diff_h
134_18 7/27/2018 0:00 NA
134_18 7/27/2018 19:00 19
134_18 7/28/2018 0:00 5
134_18 7/28/2018 8:00 8
134_18 7/28/2018 16:00 8
134_18 7/29/2018 0:00 8
134_18 7/29/2018 8:00 8
134_18 7/29/2018 12:00 4
134_18 7/30/2018 16:00 4
134_18 7/30/2018 20:00 4
134_18 7/30/2018 16:00 8
134_18 7/31/2018 0:00 8
134_18 7/31/2018 8:00 8
134_18 7/31/2018 …Run Code Online (Sandbox Code Playgroud)