【问题标题】:Identify the difference between rows in data.table and create new column saying what the differences are识别 data.table 中行之间的差异并创建新列,说明差异是什么
【发布时间】:2019-02-03 10:08:04
【问题描述】:

我有一个如下所示的数据集:

Data01 <- data.table(
  code=c("A111", "A111","A111","A111","A111", "A111","A111","A234", "A234","A234","A234","A234", "A234","A234"),
  x=c("",126,126,"",836,843,843,126,126,"",127,836,843,843), 
  y=c("",76,76,"",456,465,465,76,76,"",77,456,465,465),
  no1=c(028756, 028756,028756,057756, 057756, 057756, 057756,028756, 028756,057756,057756, 057756, 057756, 057756),
  no2=c("","",034756,"","","",789165,"",034756,"","","","",789165)
)

Data01[, version := paste0("V", 1:.N), by = code]
Data01[, unique_version := paste(code, version, sep = "_")]

我想要的是一种为每个唯一的code 条目添加一列的方法,该列说明每一行与前一行之间的区别是什么(即,将列名粘贴到现在有不同值的地方) .像这样的:

Data01[, change := c("First_entry","New_x_and_y","New_no2","New_x_and_y_and_no_1","New_x_and_y","New_x_and_y","New_no2","First_entry","New_no2","New_x_and_y_and_no1","New_x_and_y","New_x_and_y","New_x_and_y","New_no2")]

我的实际数据集有 550 万行和大约 260 万个唯一的 code 条目,所以我想任何解决方案都需要一些时间才能完成。因此,如果可能的话,包含某种进度指示器(如此处建议的内容:Progress bar in data.table aggregate action)将非常有帮助。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    你可以试试这样的

    nm <- c("x","y","no1","no2") #names(Data01)[-1L]
    Data01[, change := c("First_entry", 
            sapply(seq_len(.N)[-1L], function(n) {
                paste(c("New", 
                    nm[which(unlist(.SD[n-1L]) != unlist(.SD[n]))]), 
                    collapse="_")
            })), 
        by=.(code)]
    

    【讨论】:

      猜你喜欢
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      相关资源
      最近更新 更多