将列值转换为新值的R函数不起作用

  • 本文关键字:函数 不起作用 新值 转换 r
  • 更新时间 :
  • 英文 :


我编写了一个函数,将每列中不是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))

最新更新