【发布时间】:2018-07-24 10:59:53
【问题描述】:
我有一个数据表,其中每列代表一个事件:如果事件发生,则有一个日期值,如果没有发生,则为空。现在,所有事件都是可选的,但如果它们发生,它们必须遵循一个顺序(A,然后 B,C...)。
探索数据,我发现至少存在几个数据质量问题:例如事件 A 为空,事件 B 有一个日期:或者事件 A 的日期比事件 B 晚。我必须检查 1000 多行中的 10 列,所以我想知道是否有办法用 R 自动执行此操作(我只需要标记序列是否正常,然后手动检查错误的情况)...我唯一能想到的就是做了很多似乎根本不合适的 ifelse 嵌套语句。
有人知道更好的功能/方法吗?在此先感谢,这里是一些虚拟数据:(以下事件可以有相同的日期)
> dput(Book1)
structure(list(ID = 1:20, A = structure(c(17532, NA, NA, 17226,
17498, 17204, 17646, 17567, 17609, 17259, 17606, 17606, 17567,
17612, 17612, 17612, 17395, 17687, 17612, 17687), class = "Date"),
B = structure(c(17567, 17716, NA, 17259, 17562, NA, 17651,
17606, 17612, 17226, NA, 17681, NA, NA, NA, NA, 17407, 17687,
NA, 17716), class = "Date"), C = structure(c(NA, NA, NA,
17260, NA, NA, NA, NA, 17614, NA, NA, 17687, NA, 17687, NA,
NA, NA, NA, NA, 17716), class = "Date"), D = structure(c(NA,
NA, NA, 17407, NA, NA, NA, NA, 17625, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA), class = "Date"), E = structure(c(NA,
NA, NA, 17606, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA), class = "Date")), .Names = c("ID", "A",
"B", "C", "D", "E"), row.names = c(NA, -20L), spec = structure(list(
cols = structure(list(ID = structure(list(), class = c("collector_integer",
"collector")), A = structure(list(), class = c("collector_character",
"collector")), B = structure(list(), class = c("collector_character",
"collector")), C = structure(list(), class = c("collector_character",
"collector")), D = structure(list(), class = c("collector_character",
"collector")), E = structure(list(), class = c("collector_character",
"collector"))), .Names = c("ID", "A", "B", "C", "D", "E")),
default = structure(list(), class = c("collector_guess",
"collector"))), .Names = c("cols", "default"), class = "col_spec"), class =
c("tbl_df",
"tbl", "data.frame"))
因此,在此示例中,应标记第 2、10 和 14 行。
提前致谢
【问题讨论】:
-
第 14 行的问题是存在“间隙”吗?
-
是的,没错。顺序必须遵循顺序,连续步骤之间没有间隙。后续步骤的日期不能早于前一个步骤。
标签: r date-comparison