mutate/transform in R dplyr(传递自定义函数)

mutate/transform in R dplyr (Pass custom function)

我正在使用新的软件包 dplyr 并遇到了一些困难。

mutate(df,isOdd=digit%%2) or transform(df,isOdd=digit%%2)

两者都完美无缺。

我在问一个关于传递自定义方法的问题。

IsItOdd <- function(x) {
  if(x%%2==0)
     result<-"even"
  else
     result<-"odd"
  return(result)
}

transform(df,isOdd=IsItOdd(digit))

这不起作用,因为所有数字的整列都传递给了函数。 有没有办法通过将一个单元格而不是整列传递给函数来完成这项工作?

使用变换,您的函数必须对向量进行运算。您可以改用 ifelse,它适用于向量:

 isOdd <- function(x){ ifelse(x %% 2 == 0, "even", "odd") }

或者,您可以使用 apply 函数之一将该函数应用于列中的每个值:

 isOdd <- function(x){
     sapply(x, function(x){
          if(x %% 2 == 0){
               return("even") 
          }else{
               return("odd") 
          }
     })}

我认为您还可以使用 group_by() 按唯一值梳理行,然后进行计算,如下所示:

df %>% group_by(digit) %>% mutate(isOdd = IsItOdd(digit))

您不需要使用 mutate,您可以在 R base 或 purr 中使用

get_rango_edad <- function(x) {
    if (x <= 25) {
       return("18-25")
     } else{
        return("26+")
     }
  }

encuestas$rango_edad <- map_chr(encuestas$edad,get_rango_edad)

encuestas$rango_edad <- sapply(encuestas$edad,get_rango_edad)