首页 文章

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

提问于
浏览 622
1

我有一个包含多个列的数据框 . 一列的条目值可以是负数或正数 . 我想对此列中的每个条目应用一个函数,以便在它为负数时将其设置为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 回答

  • 0

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

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

    如果你只想要 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
    

相关问题