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

Posted

技术标签:

【中文标题】R用户定义函数对多个变量进行分组【英文标题】:R user-defined function to group multiple variables 【发布时间】:2019-04-02 17:19:14 【问题描述】:

我已将连续 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。

【问题讨论】:

欢迎来到 SO。请与dput 分享示例数据,以便人们重现问题 【参考方案1】:

如果您正在处理调查,我建议您为 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

【讨论】:

以上是关于R用户定义函数对多个变量进行分组的主要内容,如果未能解决你的问题,请参考以下文章

具有多个变量的用户定义函数? / 对一系列命名列进行操作的函数(而不是按数字索引)?

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用get_group函数获取指定组合多分组变量对应的样本(使用元组指定多个分组变量)

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用size函数计算每个分组的样本的个数

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用sum函数计算所有分组下数据变量的聚合加和值