我编写了一个函数,将每列中不是NA的值更改为新值。下面的例子说明了这个问题:
df <- data.frame(A=c(1,NA,1,1,NA),
B=c(NA,1,NA,1,NA),
C=c(1,NA,1,NA,1))
应使用以下功能将1更改为0:
cambio <- function(d,v){
d[[v]][!is.na(d[[v]])] <- 0
}
该列在函数中使用[[]]命名,并用引号作为参数传递给函数。我在对帖子的清晰而有用的回应中了解到了这一点。将data.frame列名传递给函数。然而,在运行函数之后,例如,使用第一个变量
cambio(df,"A")
tha列的值保持不变。为什么此功能不能按预期工作?
您有
d[[v]][!is.na(d[[v]])] <- 0
但这告诉它在任何而不是NA
上加零,所以你想要:
cambio <- function(d,v){
d[[v]][is.na(d[[v]])] <- 0
return(d)
}
编辑:您只是缺少return(d)
语句。
以下是一些基本的R解决方案:
一个:
replace(df, df == 1, 0)
二:
replace(df, !is.na(df), 0)
三:
data.frame(lapply(df, pmin, 0))