【发布时间】:2020-07-30 20:15:07
【问题描述】:
我有一个如下所示的数据框
DF = structure(list(Age_visit = c(48, 48, 48, 49, 49, 77), Date_1 = c("8/6/2169 9:40", "8/6/2169 9:40",
"8/6/2169 9:41", "8/6/2169 9:42", "24/7/2169 8:31", "12/9/2169 10:30",
"19/6/2237 12:15"), Date_2 = c("NA-NA-NA NA:NA:NA", "NA-NA-NA NA:NA:NA", "NA-NA-NA NA:NA:NA",
"NA-NA-NA NA:NA:NA", "NA-NA-NA NA:NA:NA", "NA-NA-NA NA:NA:NA",
"NA-NA-NA NA:NA:NA"), person_id = c("21",
"21",
"21",
"21",
"21",
"21",
"31"
), enc_id = c("A21BC","A21BC",
"A22BC",
"A23BC",
"A24BC",
"A25BC",
"A31BC"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))
数据框
Age_visit Date_1 Date_2 person_id enc_id
<dbl> <chr> <chr> <chr> <chr>
1 48 8/6/2169 9:40 NA-NA-NA NA:NA:NA 21 A21BC
2 48 8/6/2169 9:40 NA-NA-NA NA:NA:NA 21 A21BC
3 48 8/6/2169 9:41 NA-NA-NA NA:NA:NA 21 A22BC
4 49 8/6/2169 9:42 NA-NA-NA NA:NA:NA 21 A23BC
5 49 24/7/2169 8:31 NA-NA-NA NA:NA:NA 21 A24BC
6 77 12/9/2169 10:30 NA-NA-NA NA:NA:NA 31 A31BC
我有两个规则/步骤要实施。
规则 1(步骤 1)
首先,根据Date_1、person_id、enc_id 等 3 列删除重复项
DF[!duplicated(DF[,c('Date_1','person_id','enc_id')]),] # this will remove 1st row as it's a plain straight forward duplicate
规则 2(步骤 2)
从步骤 1 的输出中,如果这些记录之间的时间差小于一小时,则将基于时间的重复记录(注意 DATE_1 和 enc_id 列中的微小差异)折叠成一条记录。
例如,如果你看到person_id = 21,你可以看到在step-1之后,他所有的Date_1时间值都在同一天,但相差只有一分钟(9:40 --> 9: 41 --> 9:42)。由于不到一个小时(60 分钟),我们将它们全部折叠成一条记录并仅保留第一条记录(即 9:40)。 我们对数据框中的每个主题进行此检查
我已经根据如下所示的几列删除了重复项
DF[!duplicated(DF[,c('Date_1','person_id','enc_id')]),]
我希望我的输出如下所示
Age_visit Date_1 Date_2 person_id enc_id
<dbl> <chr> <chr> <chr> <chr>
1 48 8/6/2169 9:40 NA-NA-NA NA:NA:NA 21 A21BC
4 49 24/7/2169 8:31 NA-NA-NA NA:NA:NA 21 A24BC
5 77 12/9/2169 10:30 NA-NA-NA NA:NA:NA 31 A31BC
【问题讨论】:
标签: r dataframe dplyr data.table tidyr