R用户定义的函数,用于对多个变量进行分组

R用户定义的函数,用于对多个变量进行分组,r,function,user-defined-functions,R,Function,User Defined Functions,我已经连续三年将调查数据合并到一个数据框架中。结果表明,每个调查的变量名称都不同(例如,100个变量中有3个变量,而不是100个变量)。我试图创建一个函数,允许我输入与同一问题相关的变量。然后,该函数观察哪个变量包含信息,并返回一个新变量来替换原来的3个变量 我尝试创建下面的函数。使用“合并”选择观察结果,忽略所有不确定因素 df <- matrix(c(3, NA, NA, NA, 0.2, NA, NA, NA, 0.5), ncol = 3, nrow =

我已经连续三年将调查数据合并到一个数据框架中。结果表明,每个调查的变量名称都不同(例如,100个变量中有3个变量,而不是100个变量)。我试图创建一个函数,允许我输入与同一问题相关的变量。然后,该函数观察哪个变量包含信息,并返回一个新变量来替换原来的3个变量

我尝试创建下面的函数。使用“合并”选择观察结果,忽略所有不确定因素

df <- matrix(c(3, NA, NA, NA, 0.2, NA, NA, NA, 0.5),
              ncol = 3, nrow = 3,
              dimnames = list(NULL, c("a", "b", "c")))

special_function <-function(df, Name_new_variable, Name_a, Name_b, Name_c, na.rm= FALSE) {
  df$Name_new_variable <- coalesce(df$Name_a,
                          df$Name_b,
                          df$Name_c
  )
  df$Name_a <- NULL
  df$Name_b <- NULL
  df$Name_c <- NULL
}


df如果您使用的是调查,我建议您对
df
使用dataframe而不是矩阵。当您使用
dplyr
库时,您可以尝试以下代码:

special_function <-function(df, Name_new_variable, Name_a, Name_b, Name_c) {
  df <- as.data.frame(df) %>% select(Name_a, Name_b, Name_c)
  df[, Name_new_variable]= coalesce(df[, Name_a], df[, Name_b], df[, Name_c])
  df <- df %>% select(-c(Name_a, Name_b, Name_c)) 
  return(df)
}

special_function(df, "NewVariableName", "a", "b", "c")

如果您使用的是调查,我建议您对
df
使用数据框而不是矩阵。当您使用
dplyr
库时,您可以尝试以下代码:

special_function <-function(df, Name_new_variable, Name_a, Name_b, Name_c) {
  df <- as.data.frame(df) %>% select(Name_a, Name_b, Name_c)
  df[, Name_new_variable]= coalesce(df[, Name_a], df[, Name_b], df[, Name_c])
  df <- df %>% select(-c(Name_a, Name_b, Name_c)) 
  return(df)
}

special_function(df, "NewVariableName", "a", "b", "c")

欢迎来到SO。请与
dput
共享样本数据,以便人们重现问题欢迎访问SO。请与
dput
共享样本数据,以便人们重现问题