根据匹配日期查找唯一 ID,data.table r

Find unique IDs based on matching dates, data.table r

我有一些数据,像这样

library(data.table)

data1 <- data.table(
  id = c(seq(1:5)),
  date = c(as.Date("2021-05-05"),as.Date("2021-05-04"),as.Date("2021-05-03"),as.Date("2021-05-02"),as.Date("2021-05-01")),
  var = c(rep("var1",5))
)

data2 <- data.table(
  id = c(seq(1:5)),
  date = c(as.Date("2021-05-05"),as.Date("2020-05-04"),as.Date("2020-05-03"),as.Date("2020-05-02"),as.Date("2020-05-01")),
  var = c(rep("var2",5))
)

data3 <- data.table(
  id = c(seq(1:5)),
  date = c(as.Date("2021-05-05"),as.Date("2020-07-04"),as.Date("2020-07-03"),as.Date("2020-07-02"),as.Date("2020-07-01")),
  var = c(rep("var3",5))
)

data4 <- data.table(
  id = c(seq(1:5)),
  date = c(as.Date("2021-05-05"),as.Date("2020-07-04"),as.Date("2020-07-03"),as.Date("2020-07-02"),as.Date("2020-07-01")),
  var = c(rep("var4",5))
)

data <- rbind(data1,data2,data3,data4)
data <- data[order(id)]

我想找到并保留那些唯一 ID(包括保留日期),其中 var1、var2 和 var3 的日期彼此相等。我不关心 var4。在上面的数据中,只有 id 1 符合这些条件,所以我想以这样的方式结束:

data_final <- data.table(
  id = 1,
  date_var1 = as.Date("2021-05-05"),
  date_var2 = as.Date("2021-05-05"),
  date_var3 = as.Date("2021-05-05")
)

过滤后使用dcast重塑为宽格式-按'id'分组,过滤'date'中所有值相同的'id'。然后对过滤后的数据执行 dcast 以重塑回宽格式

data1 <- data[data[, .I[uniqueN(date[var %in% paste0("var", 1:3)]) == 1],id]$V1
         ][var != 'var4']
out1 <- dcast(data1, id ~ paste0('date_', var), value.var = 'date')

-输出

> out1
   id  date_var1  date_var2  date_var3
1:  1 2021-05-05 2021-05-05 2021-05-05