R 函数修改特定列(将 NA 设置为零)



我想将特定列的 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

最新更新