r - 用 NA 替换 data.table 列中的重复值
问题描述
我想删除不均匀 data.table 的每一列中的重复值。例如,如果原始数据是(真实的 data.table 有很多行和列):
dt <- data.table(A = c("5p", "3p", "3p", "6y", NA), B = c("1c", "4r", "1c", NA, NA), C = c("4f", "5", "5", "5", "4m"))
> dt
A B C
1: 5p 1c 4f
2: 3p 4r 5
3: 3p 1c 5
4: 6y <NA> 5
5: <NA> <NA> 4m
删除每列中的重复值后,它应该如下所示:
A B C
5p 1c 4f
3p 4r 5
NA NA NA
6y NA NA
NA NA 4m
我正在尝试使用 data.table 在另一个线程中提出的解决方案(使用 dplyr 将时间序列数据中的重复值替换为 NA)。但是,我只将每列中的第一个重复值替换为“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
我应该如何修改代码以替换所有重复项?
解决方案
利用duplicated
library(data.table)
dt[, 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
推荐阅读
- angular - Angular Service 响应会记住初始参数
- karate - “匹配每个”数组中的一个元素
- asp.net-core - 事件回调字符串在 blazor 中不起作用
- c++ - 为什么某些Windows dll名称以lib为前缀
- javafx - JavaFX 11 Web 视图加载异常
- c# - 数组比二维游戏中的列表好吗?
- python - 你能用 ETABS API 定义桥墩部分吗?
- python - 是否可以从 RetryError 中恢复 HTTP 响应?(Python 请求库)
- neovim - 尝试通过 nvim-lspconfig 配置 pyls
- wpf - Microsoft Blend 2019 中的无资源窗口 .Net Core WPF 项目