簡體   English   中英

R dplyr中的mutate / transform(傳遞自定義函數)

[英]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函數之一apply函數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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM