首页 > 解决方案 > 如何在一行中只保留第一次出现的重复项?

问题描述

data.table我正在寻找一种方法来识别和替换 a with中的逐行重复值NA

以下答案可帮助我识别逐行重复...

在 R 中逐行删除重复值

...但我正在寻找一种解决这些重复项的方法。

问题

(dt <- data.table(X = 1:10, Y = seq(1, 19, by = 2), Z = c(1, rep(3, 9))))
     X  Y Z
 1:  1  1 1
 2:  2  3 3
 3:  3  5 3
 4:  4  7 3
 5:  5  9 3
 6:  6 11 3
 7:  7 13 3
 8:  8 15 3
 9:  9 17 3
10: 10 19 3

预期结果

     X   Y  Z
 1:  1  NA NA
 2:  2   3 NA
 3:  3   5 NA
 4:  4   7  3
 5:  5   9  3
 6:  6  11  3
 7:  7  13  3
 8:  8  15  3
 9:  9  17  3
10: 10  19  3

请帮忙

标签: rdata.table

解决方案


这是一个data.table解决方案:

dt[, row := .I
   ][, melt(.SD, id.cols = "row", measure.vars = c("X", "Y", "Z"))
     ][, value := replace(value, duplicated(value), NA), by = row
       ][, dcast(.SD, row ~ variable)
         ][, !"row"]

推荐阅读