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 <- nafac(z)
。
R 通过 value 而不是引用传递。所以正如@user2554330所说:nafac(z)
所做的只是将z
的value存储在x
内,然后修改x
在的范围内功能。原来的 z
在您的工作区中保持不变。你需要做的是将nafac()
重写为return()
x
的修改版本,然后使用这个结果覆盖原来的z
,如下所示:z <- 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 中传递未定义的函数参数,为啥?
R语言自定义函数计算dataframe每列中的缺失值NA的个数缺失值问题及其填充示例
R语言使用isna函数查看列表和dataframe中是否包含缺失值将dataframe中数据列中的异常值标注为缺失值NA使用na.omit函数删除dataframe中包含缺失值NA的数据行