【问题标题】:Find unique IDs based on matching dates, data.table r根据匹配日期查找唯一 ID,data.table r
【发布时间】:2022-01-07 10:38:30
【问题描述】:

我有一些数据,像这样

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")
)

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    过滤后使用dcast 重塑为宽格式 - 按“id”分组,过滤“日期”中所有值相同的“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
    

    【讨论】:

    • 我不确定这是否可行。我应该指定的。实际数据集约为。 1500 万行,所以我认为重塑数据行不通?
    • 这部分:[var %in% paste0("var", 1:3)],我不一定知道它的前3行?
    • @epiNS 你的帖子说你只对 var1、var2、var3 感兴趣,即where date for var1, var2, and var3 is equal to one another. I dont care about var4.。我本可以明确显示 c("var1", "var2", "var3") 而不是 paste0("var", 1:3) 来创建值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多