【问题标题】:Multiple group_by with dplyr使用 dplyr 的多个 group_by
【发布时间】:2019-08-28 09:33:54
【问题描述】:

这个论坛上有很多关于它的问题,但我做不到。我得到了一个带有一堆分类变量(类因子)的数据框。我有一个目标列(1 或 0)。我想计算分类变量的每个级别内 1 的频率。我想一次性完成这 3 个 group_by 计算。

library(dplyr)

# Build the toy dataset
target  = sample(x = c(0,1),size = 100,replace = T)
cat1 = sample(x = c("a","b","c"),size = 100,replace = T)
cat2 = sample(x = c("x","y","z"),size = 100,replace = T)
cat3 = sample(x = c("T","U","V"),size = 100,replace = T)
df = data.frame(target,cat1,cat2,cat3)

# How to do those 3 group_by computations in once knowing that in reality I got thousands of those categorical columns?
df %>%
  group_by(cat1) %>%
  summarise(statistics = mean(target))

df %>%
  group_by(cat2) %>%
  summarise(statistics = mean(target))

df %>%
  group_by(cat3) %>%
  summarise(statistics = mean(target))

【问题讨论】:

  • group_by(starts_with("cat"))?
  • 试试tidyr::gather(df, k,val, -target) %>% group_by(k,val) %>% summarise(stats=mean(target))
  • @A. Suliman,哇,谢谢你。效果很好!
  • @Jaap 这行得通吗?我认为group_by 不支持vars 参数。
  • @RonakShah 我希望它能够工作,但显然不是。您可能会使用来自rlang!!! 之类的东西。

标签: r group-by dplyr


【解决方案1】:

如果我正确理解你的问题,我相信这段代码可以帮助你:

df %>%
  group_by(cat1,cat2,cat3) %>%
  summarise(statistics = mean(target)) %>% arrange(cat1,cat2)

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 2014-03-06
    • 2017-08-16
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    相关资源
    最近更新 更多