如何在data.table中替换跨行重复值为缺失值?
处理data.table跨行重复值替换为缺失值
针对你的data.table数据,要将同一列中重复出现的非"0"值替换为缺失值,可以用以下data.table原生操作实现:
library(data.table) # 对除Node外的列处理,保留每列首次出现的非0值,后续重复项替换为NA result_wide[, (colnames(result_wide)[-1]) := lapply(.SD, function(col) { # 标记重复且非0的位置 duplicate_mask <- duplicated(col) & col != "0" col[duplicate_mask] <- NA_character_ col }), .SDcols = colnames(result_wide)[-1]]
代码说明
colnames(result_wide)[-1]指定除Node列外的所有目标列,避免处理行标识列lapply(.SD, ...)遍历每一列,对列内数据做针对性处理duplicated(col)识别列内重复元素,结合col != "0"排除原本的"0"占位值,只标记有效内容的重复项- 将标记的重复位置赋值为
NA_character_(字符型缺失值,匹配原数据的字符类型)
执行后,以1列为例,原本跨行重复的"Mario"只会保留首次出现的记录,后续重复项都会被替换为NA。
内容的提问来源于stack exchange,提问作者KArrow'sBest
相关产品推荐
相关产品推荐

