如何使用 R 基于外部列表将值从 data.frame 转换为 NA?

How to transform values into NA from a data.frame, based on an external list, using R?

当我从 R (Rstudio) 中的数据帧转换数据时,如果数字在列表中,我想将 NA 值赋予指定的列。这个列表(我相信它是一个列表),来自 boxplot.stats(x)$out.

这就是我从箱线图中获取带有数字列表的变量的方法:

age_outofrange <- boxplot.stats(census$age)$out

这就是我编写的代码。我使用了 unique(x) 方法,因为有些年龄重复了:

census["age"][census["age"] == unique(age_outofrange), ] <- NA

人口普查 -> 数据框

年龄 -> 目标列

这是我当前数据框的示例:

index|age    
1|34
2|79
3|80
4|23
5|650
6|44
7|560
8|12
9|65
10|79

这就是我所期待的(我写了一个新的 csv 但没有任何反应):

index|age    
1|34
2|NA
3|NA
4|23
5|NA
6|44
7|NA
8|12
9|65
10|NA

所以我替换了值:79、80、650 和 560,它们是 age_outofrange 中的值。 我还尝试了类似以下代码的操作,但什么也没发生(或者至少 csv 向我展示了什么)。一些值已更改,但绝大多数没有更改:

df <- df$column[-listvalue, ]

你知道如何正确编码吗?感谢您的回答!

我们可能需要使用 [[ 将列提取为 vector。另外,如果'age_outofrange'中unique个元素的length大于1

,则==可以用%in%代替
census[["age"]][census[["age"]]  %in% unique(age_outofrange)] <- NA

-输出

> census
   index age
1      1  34
2      2  NA
3      3  NA
4      4  23
5      5  NA
6      6  44
7      7  NA
8      8  12
9      9  65
10    10  NA

数据

census <- structure(list(index = 1:10, age = c(34L, 79L, 80L, 23L, 650L, 
44L, 560L, 12L, 65L, 79L)), class = "data.frame", row.names = c(NA, 
-10L))
age_outofrange <- c(79, 80, 650, 560)