我正在使用新软件包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))


这不起作用,因为所有数字的整个列都传递给该函数。
有没有一种方法可以通过仅将一个单元格传递给函数而不是整个列来使它起作用?

最佳答案

使用transform时,您的函数必须在矢量上进行操作。您可以改用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")
          }
     })}

关于r - 在R dplyr中进行更改/转换(通过自定义功能),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28579361/

10-12 17:33