【问题标题】:Get description of groups from within a grouped data frame从分组数据框中获取组的描述
【发布时间】:2016-10-07 14:06:00
【问题描述】:

我需要编写一个函数,该函数将接收一个分组数据框(来自 dplyr)并为每个组绘制一个图,标题描述它用于哪个组。关键是我不知道分组变量是什么,甚至不知道会有多少。

我使用groups 拼凑了一些东西以获取分组变量,然后使用.[1,g] 访问该值,其中g 是分组变量名称的字符版本,如下所示。

虽然我是 dplyr 的新手,但这感觉是错误的做法,也就是说,它并不是真正的 dplyr 原生方式。它适用于我所做的小测试,但我担心它会在我没有预见到的一些奇怪的情况下失败。大家会怎么做呢?有没有更多dplyr-ish 的方法?

如果我所做的实际上是一个好主意,我会将其发布为答案,供大家酌情投票。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:
    library(data.table)
    
    setDT(d) # or create directly as data.table
    
    par(mfrow = c(2, 3))
    
    d[, plot(y, main = paste(names(.BY), .BY, sep = "=", collapse = ", ")), by = .(A, B)]
    

    【讨论】:

    • 那么如果有人传给我一个分组数据框,我该如何在 by 中使用这些分组?
    • 告诉别人不要浪费时间传递你“分组”的数据帧。但是如果他们不在乎并坚持这样做,请使用by=c(as.character(groups(their_grouped_data.frame)))
    • 不是新的 dplyr 东西的忠实粉丝,嗯?
    • 正确。但抛开我的个人品味不谈,这根本不能胜任这项任务。
    【解决方案2】:

    这是我一起破解的;如问题中所述,它使用groups 获取分组变量,然后使用.[1,g] 访问值,其中g 是分组变量名称的字符版本,如下所示。

    它只是制作一个带有标题作为变量的数据框,而不是制作图。

    library(dplyr)
    d <- as.tbl(data.frame(expand.grid(A=1:3,B=1:2,y=1:2)))
    
    d1 <- d %>% group_by(A)
    g <- unlist(lapply(groups(d1), paste))
    d1 %>% do(data.frame(title=paste(paste(g, "=", .[1,g]), collapse=", "), stringsAsFactors=FALSE))
    
    ## Source: local data frame [3 x 2]
    ## Groups: A [3]
    ##  
    ##       A title
    ##   <int> <chr>
    ## 1     1 A = 1
    ## 2     2 A = 2
    ## 3     3 A = 3
    
    d1 <- d %>% group_by(A, B)
    g <- unlist(lapply(groups(d1), paste))
    d1 %>% do(data.frame(title=paste(paste(g, "=", .[1,g]), collapse=", "), stringsAsFactors=FALSE))
    ## Source: local data frame [6 x 3]
    ## Groups: A, B [6]
    ##  
    ##       A     B        title
    ##   <int> <int>        <chr>
    ## 1     1     1 A = 1, B = 1
    ## 2     1     2 A = 1, B = 2
    ## 3     2     1 A = 2, B = 1
    ## 4     2     2 A = 2, B = 2
    ## 5     3     1 A = 3, B = 1
    ## 6     3     2 A = 3, B = 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-02
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2021-12-09
      • 1970-01-01
      相关资源
      最近更新 更多