我想为特定列设置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
我该如何解决问题?
答案 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