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

时间:2016-03-17 01:41:12

标签: r dataframe

我想为特定列设置NA值为零。我跟着instructions from this question,解决方案在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

现在,当我将<-更改为<<-时(按照此post中的说明操作),我收到错误消息:

setNAToValue(d$colB, 0)
# Error in column[is.na(column)] <<- value : object 'column' not found

我该如何解决问题?

1 个答案:

答案 0 :(得分:2)

尝试编写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