创建动态分组依据

Lon*_*car 3 r dataframe dplyr purrr tidyverse

df = data.frame(
  A = c(1, 4, 5, 13, 2),
  B = c("Group 1", "Group 3", "Group 2", "Group 1", "Group 2"),
  C = c("Group 3", "Group 2", "Group 1", "Group 2", "Group 3")
)

df %>%
  group_by(B) %>%
  summarise(val = mean(A))

df %>%
  group_by(C) %>%
  summarise(val = mean(A))
Run Code Online (Sandbox Code Playgroud)

group_by我不想为每个唯一的一组代码编写新的代码块,而是创建一个循环来遍历df数据帧并将结果保存到列表或数据帧中。

我想看看特征A的平均值如何分布在特征BC 上,而不必为数据集中的每个分类特征编写新的代码块。

我试过这个:

List_Of_Groups <- map_df(df, function(i) {
  df %>% 
    group_by(!!!syms(names(df)[1:i])) %>% 
    summarize(newValue = mean(A))
})
Run Code Online (Sandbox Code Playgroud)

Ric*_*c S 5

使用purrr's map,您可以将指定的代码块应用于所有字符列。基本上,您字符变量的名称映射到后面的函数

purrr::map(names(df %>% select(where(is.character))), function(i) {
  df %>% 
    group_by(!!sym(i)) %>% 
    summarize(newValue = mean(A))
})
Run Code Online (Sandbox Code Playgroud)

输出

# [[1]]
# A tibble: 3 x 2
#   B       newValue
#   <chr>      <dbl>
# 1 Group 1      7  
# 2 Group 2      3.5
# 3 Group 3      4  
# 
# [[2]]
# A tibble: 3 x 2
#   C       newValue
#   <chr>      <dbl>
# 1 Group 1      5  
# 2 Group 2      8.5
# 3 Group 3      1.5
Run Code Online (Sandbox Code Playgroud)

  • 请原谅这个双关语,但是“哪里”来自哪里?包裹? (2认同)