r - 用R中的NA替换列中的所有重复元素
问题描述
如何用na in r替换列中的所有重复元素?这是我正在使用的数据的示例子集:
> df.1
V1 V2 V3 V4
X1 4D+44 18D+30 125D+44 4D+48
X2 NONE NONE 125D+44 NONE
X3 NONE NONE 125D+44 NONE
X4 29D+139 18D+124 125D+44 4D+133
X5 29D+139 5D+164 125D+44 NONE
X6 30D+174 9D+194 NONE NONE
X7 6D+227 4D+225 NONE 39D+217
X8 NONE NONE NONE 39D+217
X9 4D+285 NONE NONE NONE
X10 NONE NONE NONE NONE
在每一列中,我想用 . 替换重复的元素NA
。例如我想V1
看起来像这样:
4D+44 NA NA NA NA 30D+174 6D+227 NA 4D+285 NA
我能得到的最接近结果的是通过使用duplicated()
> df.1$V1[duplicated(df.1$V1)] <- NA
> df[df == "NONE"] <- NA
但它导致V1
看起来像这样,保留重复元素的第一个值。
4D+44 NA NA 29D+139 NA 30D+174 6D+227 NA 4D+285 NA
有没有办法识别和替换所有重复的元素?
感谢您的答复。
解决方案
我们可以使用它duplicated
来创建一个逻辑索引并将其用于replace
每个具有NA
df1[] <- lapply(df1, function(x)
replace(x, duplicated(x)|duplicated(x, fromLast = TRUE), NA))
或与dplyr
library(dplyr)
df1 %>%
mutate_all(~ replace(., duplicated(.)|duplicated(., fromLast = TRUE), NA))
数据
df1 <- structure(list(V1 = c("4D+44", "NONE", "NONE", "29D+139", "29D+139",
"30D+174", "6D+227", "NONE", "4D+285", "NONE"), V2 = c("18D+30",
"NONE", "NONE", "18D+124", "5D+164", "9D+194", "4D+225", "NONE",
"NONE", "NONE"), V3 = c("125D+44", "125D+44", "125D+44", "125D+44",
"125D+44", "NONE", "NONE", "NONE", "NONE", "NONE"), V4 = c("4D+48",
"NONE", "NONE", "4D+133", "NONE", "NONE", "39D+217", "39D+217",
"NONE", "NONE")), class = "data.frame", row.names = c("X1", "X2",
"X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10"))
推荐阅读
- javascript - 传单:开/关层的引导切换输入无法正常工作
- python - Generate random float number between [0,1], not fixed step but step must be larger than 0.05 in Python?
- javascript - Run method when enter is pressed
- wxwidgets - 关于 wxWidgets plus GTK+ plus Cairo 在嵌入式应用程序中的问题
- android - 不要让推送通知下拉
- php - 如何使用 Laravel 的查询构建器提高循环查询的性能?
- c# - 为什么从 int、double、float 和 decimal 转换为 char 有效,但是当这些相同的变量预先转换为 IConvertible 时,不是吗?
- ios - CocoaPods could not find compatible versions for pod "Firebase/Core” | cloud_firestore, Flutter
- c# - Outlook VSTO 加载项与外部 C++ 应用程序之间的交互
- python - tensorflow convolution result to numpy