如何使用 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)
当我从 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)