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

R函数修改特定列(将NA设置为零),r,dataframe,R,Dataframe,我想为特定列将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 现在,当我更改时,请尝试编写R替

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

现在,当我更改
时,请尝试编写R替换函数:

"setNA<-" <- function(x, value) ifelse(is.na(x), value, x)

# test using d from question
setNA(d$colB) <- 0

尝试编写R替换函数:

"setNA<-" <- function(x, value) ifelse(is.na(x), value, x)

# test using d from question
setNA(d$colB) <- 0

您可能不希望在函数中执行此操作。功能通常是自包含的,具有输入、输出和无副作用(如修改外部内容)。如果确实需要函数install data.table和do
setColNAToValue=function(colname,value,data=d)set(data,i=which(is.na(d[[colname]]),j=colname,v=value)
d$colB
将作为对象传递给函数,而不是作为对
df
中列的引用。您需要同时传入
df
“b”
,然后进行替换,然后返回所有
df
,您似乎正在重写
replace
函数
replace(d,col(d)=2&is.na(d),0)
@latemail:如何连接
df
“b”
形成对列
df$b
?@stackoverflowuser2010的引用-类似于
f,您可能不希望在函数中这样做。功能通常是自包含的,具有输入、输出和无副作用(如修改外部内容)。如果确实需要函数install data.table和do
setColNAToValue=function(colname,value,data=d)set(data,i=which(is.na(d[[colname]]),j=colname,v=value)
d$colB
将作为对象传递给函数,而不是作为对
df
中列的引用。您需要同时传入
df
“b”
,然后进行替换,然后返回所有
df
,您似乎正在重写
replace
函数
replace(d,col(d)=2&is.na(d),0)
@latemail:如何连接
df
“b”
要形成对列
df$b
?@stackoverflowuser2010的引用-类似于
f Neat,但不会
“setNAIt可能快一点--您必须测试它。在这种情况下,您可以使用
replace(x,is.na(x),value)
将正文简化为一条语句;但是,
ifelse
非常清楚,这可能是最重要的考虑因素,而不是速度。Neat,but not
“setNAIt可能要快一点——您必须测试它。在这种情况下,您可以使用
replace(x,is.na(x),value)
将主体简化为单个语句;然而,
ifelse
非常清楚,这可能是最重要的考虑因素,而不是速度。
setNAToValue(d$colB, 0)
# Error in column[is.na(column)] <<- value : object 'column' not found
"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