R函数修改特定列(将NA设置为零)
我想为特定列将NA值设置为零。我遵循了,解决方案在R提示符下工作 但是,当我将命令放在函数中时,它不起作用 以下是一个例子: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替
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和dosetColNAToValue=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和dosetColNAToValue=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