R函数将多个因子水平定义为缺失

Posted

技术标签:

【中文标题】R函数将多个因子水平定义为缺失【英文标题】:R function to define several factor levels as missing 【发布时间】:2022-01-12 17:35:46 【问题描述】:

我有几个因素,我想将其定义为“无答案”和“不知道”级别。但是,我为实现此目的而编写的功能不起作用,我无法弄清楚原因。 示例:

y <- factor(c("a", "b", "c", "Don´t know", "No answer"))
z <- factor(c("a", "b", "c", "Don´t know", "No answer"))
y

[1] a          b          c          Don´t know No answer 
Levels: a b c Don´t know No answer

将单个变量的级别定义为缺失确实有效

levels(y)[levels(y)=="Don´t know"|levels(y)=="No answer"]<- NA
y
[1] a    b    c    <NA> <NA>
Levels: a b c

但是,应用函数不会。

nafac <- function(x)

levels(x)[levels(x)=="Don´t know"|levels(x)=="No answer"]<- NA

nafac(z)
z
[1] a          b          c          Don´t know No answer 
Levels: a b c Don´t know No answer

函数有什么问题?谢谢!

【问题讨论】:

你的函数修改了它的本地副本;它需要返回修改后的值,你称之为z &lt;- nafac(z) R 通过 value 而不是引用传递。所以正如@user2554330所说:nafac(z)所做的只是将zvalue存储在x内,然后修改x的范围内功能。原来的 z 在您的工作区中保持不变。你需要做的是将nafac()重写为return()x的修改版本,然后使用这个结果覆盖原来的z,如下所示:z &lt;- nafac(z) 【参考方案1】:

我们可以简单地添加return 来返回更新的向量;

nafac <- function(x)
levels(x)[levels(x)=="Don´t know"|levels(x)=="No answer"]<- NA
return(x)


nafac(z)

输出;

a b c <NA> <NA>

【讨论】:

以上是关于R函数将多个因子水平定义为缺失的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用caret包的predict函数对测试数据集进行数据预处理(和训练集的处理方式保持一致):缺失值填充数值变量最小最大缩放因子变量独热编码等

何时使用缺失值与 NULL 值在 R 中传递未定义的函数参数,为啥?

忽略 keras 中 R 的缺失目标值的损失函数

R语言自定义函数计算dataframe每列中的缺失值NA的个数缺失值问题及其填充示例

R语言使用isna函数查看列表和dataframe中是否包含缺失值将dataframe中数据列中的异常值标注为缺失值NA使用na.omit函数删除dataframe中包含缺失值NA的数据行

R进阶:缺失值的处理、拟合关系