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

时间:2018-12-10 10:16:55

标签: r dplyr

我有一个包含几列的数据框。一栏中的值可以为负或正。 我想在此列中的每个条目上应用一个函数,以便万一它为负数,它将设置为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)
}

,然后在数据框的“值”列上使用诸如apply函数之类的东西。

例如:

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

我不确定它的正确方法,尽管我无法使其正常工作。可能对“应用”也有错误的理解

2 个答案:

答案 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

答案 1 :(得分:0)

您可以将sapply内部的函数直接用作lamda,而不必单独定义它:

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