R 如何删除data.table中不均匀列中的重复值?

R 如何删除data.table中不均匀列中的重复值?,r,duplicates,data.table,R,Duplicates,Data.table,我想删除不均匀data.table的每个coulmn中的重复值。例如,如果原始数据为(实际数据表有许多列和行): 我正在尝试使用data.table在另一个线程中提出的解决方案。但是,我只得到每列中的第一个重复值,并用“NA”替换,而不是子列 cols <- colnames(dt) dt[, lapply(.SD, function(x) replace(x, anyDuplicated(x), NA)), .SDcols = cols] > dt A B

我想删除不均匀data.table的每个coulmn中的重复值。例如,如果原始数据为(实际数据表有许多列和行):

我正在尝试使用data.table在另一个线程中提出的解决方案。但是,我只得到每列中的第一个重复值,并用“NA”替换,而不是子列

cols <- colnames(dt)
dt[, lapply(.SD, function(x) replace(x, anyDuplicated(x), NA)), .SDcols = cols]
> dt
      A    B    C
1:   5p   1c   4f
2:   3p   4r    5
3: <NA> <NA> <NA>
4:   6y <NA>    5
5: <NA> <NA>   4m
cols-dt
A、B、C
1:5p 1c 4f
2:3p 4r 5
三:
4:6y 5
5:4米

我应该如何修改代码以替换所有副本?

您已经非常接近了。我没有使用
anyDuplicated
,而是像这样使用
duplicated

dt[, lapply(.SD, function(x) ifelse(duplicated(x) == TRUE, NA, x))]

尝试
dt[,lapply(.SD,duplicated)]
了解
if else
的作用。

我相信这将是正确的
数据。表
实现此任务的方法:

cols <- colnames(dt)
dt[, (cols) := lapply(.SD, function(x) replace(x, duplicated(x), NA))]

      A    B    C
1:   5p   1c   4f
2:   3p   4r    5
3: <NA> <NA> <NA>
4:   6y <NA> <NA>
5: <NA> <NA>   4m

cols-hey@juancho,链接帖子中的解决方案不适合你?
dt[, lapply(.SD, function(x) ifelse(duplicated(x) == TRUE, NA, x))]
cols <- colnames(dt)
dt[, (cols) := lapply(.SD, function(x) replace(x, duplicated(x), NA))]

      A    B    C
1:   5p   1c   4f
2:   3p   4r    5
3: <NA> <NA> <NA>
4:   6y <NA> <NA>
5: <NA> <NA>   4m