R 如何删除data.table中不均匀列中的重复值?
我想删除不均匀data.table的每个coulmn中的重复值。例如,如果原始数据为(实际数据表有许多列和行): 我正在尝试使用data.table在另一个线程中提出的解决方案。但是,我只得到每列中的第一个重复值,并用“NA”替换,而不是子列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
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