我想将特定列的 NA 值设置为零。我按照这个问题的说明进行操作,解决方案在 R 提示符下工作。
但是,当我将命令放在函数中时,它不起作用。
下面是一个示例:
d <- data.frame(colA=c("Joe", "Jane", "Jack"), colB=c(25, NA, 35), colC=c(100, 200, NA))
d
# colA colB colC
# 1 Joe 25 100
# 2 Jane NA 200
# 3 Jack 35 NA
我想删除 colB 中的 NA,所以我按照另一个 StackOverflow 帖子来生成这个工作命令:d$colB[is.na(d$colB)] <- 0
但是现在我想编写一个函数,这样我就不必键入列名两次,因此该列作为参数传递。
setNAToValue <- function(column, value) {
column[is.na(column)] <- value
}
但是,当我应用它时,没有任何反应:
setNAToValue(d$colB, 0)
d
# colA colB colC
# 1 Joe 25 100
# 2 Jane NA 200
# 3 Jack 35 NA
现在,当我将<-
更改为<<-
(按照本文中的说明进行操作)时,出现错误:
setNAToValue(d$colB, 0)
# Error in column[is.na(column)] <<- value : object 'column' not found
如何解决问题?
尝试编写 R 替换函数:
"setNA<-" <- function(x, value) ifelse(is.na(x), value, x)
# test using d from question
setNA(d$colB) <- 0
现在我们有:
> d
colA colB colC
1 Joe 25 100
2 Jane 0 200
3 Jack 35 NA