在R中的数据框的每个元素上应用带参数的函数

我有一个包含多个列的数据框 . 一列的条目值可以是负数或正数 . 我想对此列中的每个条目应用一个函数,以便在它为负数时将其设置为0,否则该值应保持不变 .

我的想法如下:

df <- data.frame("ID" = c(1,2,3,4,5),"value" = c(1,-1,0,2,-2))

f <- function(value) {
  if (value > 0 ){
    return(value)
  }
  else return(0)
}

然后在数据帧的“value”列上使用类似apply函数的内容 .

例如:

df$newValue <- apply(df, f(df$value))

我不确定它是正确的方法,因为我没有让它工作 . 可能对“应用”也有错误的理解

回答(2)

2 years ago

您可以直接使用sapply内部的函数作为lamda而不是单独定义它:

sapply(df$value,function(x){
  if (x > 0 ){
    return(x)
  }
  else return(0)
})

2 years ago

如果你只想要 value

df$value[df$value<0] <- 0

对于 newvalue

df$newvalue <- df$value # first copy all values
df$newvalue[df$value<0] <- 0 # change by the rule

或者对于所有列,您只需要:

df[df<0] <- 0
#   ID value
# 1  1     1
# 2  2     0
# 3  3     0
# 4  4     2
# 5  5     0

因为 df<0 会在满足该条件的情况下为您提供 TRUE ,在所有列中:

df<0
        ID value
[1,] FALSE FALSE
[2,] FALSE  TRUE
[3,] FALSE FALSE
[4,] FALSE FALSE
[5,] FALSE  TRUE