[英]errors when using R function using variables/column names as arguments to create a new variable using mutate and case_when
[英]Function to create new variable by multiple conditions using mutate and case_when (R)
我正在嘗試創建一個函數來比較變量 1 和 2,並根據它們是否匹配創建第三個變量。 我需要這樣做 > 25 次(對於不同的變量組合),這就是為什么我想創建一個函數而不是僅僅使用 mutate 和 case_when。
我對 R 很陌生,所以這主要是從其他有用的堆棧溢出帖子和雜項教程拼湊而成的。
這是我嘗試過的:
determine_match <- function(df, col_a, col_b){
col_a <- enquo(col_a)
col_b <- enquo(col_b)
newvar <- paste0(quo_name(col_a), quo_name(col_b))
df <- df %>% mutate(!!newvar:= case_when(
!!col_a == '1' & !!col_b =='Yes' ~ 'Match',
!!col_a == '0' & !! col_b == 'No' ~ 'Match',
!!col_a == '1' & !!col_b == 'No' ~ 'No Match',
!!col_a == '0' & !!col_b == 'Yes' ~ 'No Match',
is.na(!!col_a) | is.na(!!col_b) ~ NA_character_,
TRUE ~ 'Error'
))
}
我在這個數據集上測試了它:
test1 <- c('1', '0', '1', '1', '0', NA)
test2 <- c('Yes', 'No', 'No,', NA, 'Yes', NA)
id <- c(1,2,3,4,5,6)
testing.df <- data.frame(id, test1, test2)
我沒有收到錯誤,但是當我使用打印語句運行該函數時,它只返回 newvar 的字符串名稱,而不會更改實際的數據框。
我也試過testing.df %>% mutate(testing3 = funs(determine_match(testing.df, testing1, testing2)))
和testing.df %>% mutate(testing3 = funs(determine_match(testing.df, testing1, testing2)))
給了我~determine_match(testing.df, testing1, testing2)
不確定問題是功能問題還是應用嘗試問題,還是兩者兼而有之。
希望好心人幫幫忙,謝謝!!
您需要return
結果,添加return(df)
(甚至只是df
)作為函數的最后一行。
如果您不擔心除您明確提及的輸入值以外的輸入值( "0"
、 "1"
、 NA
表示col_a
和"Yes"
、 "No"
、 NA
表示col_b
),您可以將條件簡化為這(對於“簡化”的某些定義——它肯定更短)。
determine_match <- function(df, col_a, col_b) {
col_a <- enquo(col_a)
col_b <- enquo(col_b)
newvar <- paste0(quo_name(col_a), quo_name(col_b))
df <- df %>% mutate(
!!newvar :=
c("No Match", "Match")[((!!col_a == '1') == (!!col_b == 'Yes')) + 1]
)
return(df)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.