【问题标题】:Determine if a tibble is grouped or not确定一个小标题是否被分组
【发布时间】:2017-03-07 18:33:54
【问题描述】:

是否有一个函数可以确定一个小标题是否是一个分组。

我使用以下代码在不收缩数据集的情况下创建聚合变量:

mydataset %>% select(count, group) %>%
  group_by(group) %>%
  mutate(count_group = sum(count))

如果我使用 mutate,我有一个分组的 tibble。如果我使用 summarise,我有一个简单的 tibble。

是否有像as.grouped() 这样的函数可以确定小标题的字符分组?

【问题讨论】:

  • 您在dplyr 中寻找is.grouped_df 吗?
  • 好的,谢谢。它没有出现在 dplyr 包的帮助索引中。
  • @YCR - 如果你使用 pacman 软件包,那么 p_funs(dplyr) 会显示给你 is.grouped_df
  • apropos('grouped')
  • @Dason p_funs 不是很实用,包的索引比较好。 (但显然不完整)

标签: r dplyr


【解决方案1】:

函数 is.grouped_df()is_grouped_df() 如果是分组 tibble 则都将返回 TRUE 逻辑,如果不是则返回 FALSE。

# Create a tibble    
df <- tibble(x = c(5, 2, NA))
# Group by column 'x'
gdf <- group_by(df, x)
# Returns FALSE
is.grouped_df(df)
# Returns TRUE
is.grouped_df(gdf)

【讨论】:

    【解决方案2】:

    当然您知道您可以使用ungroup() 删除任何分组。无论如何,有很好的方法来确定数据帧是否被分组,这只是通过打印数据帧。分组变量将显示在顶部。

    dataframe <- data_frame('group' = c('a','a','b'),
                            'value' = c(1,2,3))
    
    dataframe %>% group_by(group)
    
    Source: local data frame [3 x 2]
    **Groups: group [2]**
    
      group value
      <chr> <dbl>
    1     a     1
    2     a     2
    3     b     3
    

    【讨论】:

      【解决方案3】:

      分组信息保存为attribute。示例:

      library("tidyverse")
      a <- mtcars %>% group_by(cyl)
      attributes(a)
      $names
       [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
      [11] "carb"
      
      $row.names
       [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"
       [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"
       [7] "Duster 360"          "Merc 240D"           "Merc 230"
      [10] "Merc 280"            "Merc 280C"           "Merc 450SE"
      [13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood"
      [16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"
      [19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"
      [22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"
      [25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"
      [28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"
      [31] "Maserati Bora"       "Volvo 142E"
      
      $class
      [1] "grouped_df" "tbl_df"     "tbl"        "data.frame"
      
      $groups
      # A tibble: 3 x 2
          cyl .rows
        <dbl> <list>
      1     4 <int [11]>
      2     6 <int [7]>
      3     8 <int [14]>
      

      attributes 函数可用于检查是否存在分组属性:

      any(names(attributes(a)) == "groups")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 2020-06-18
        • 1970-01-01
        相关资源
        最近更新 更多