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

问题描述 投票:1回答:1

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

我试着创建下面的功能。使用'coalesce'来选择观察并忽略所有NA。

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”。考虑新变量“name_new_variable”的名称,并合并3列Name_a,Name_b,Name_c。

r function user-defined-functions
1个回答
0
投票

如果您正在使用调查,我建议您使用数据框而不是矩阵为您的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")

输出:

> special_function(df, "NewVariableName", "a", "b", "c")
  NewVariableName
1             3.0
2             0.2
3             0.5
© www.soinside.com 2019 - 2024. All rights reserved.