【问题标题】:Access group levels in dplyr在 dplyr 中访问组级别
【发布时间】:2017-01-22 09:22:26
【问题描述】:

我想在dplyr 中获取分组对象的组级别。这当然等于分组后的分组变量。 分组变量不能修改,但可以扩展。举个例子:

some_df <- data_frame(gr    = LETTERS[1:2], 
                      value = c(3,4))

add_a_row <- function(x) {
  row <- data_frame(gr = NA, value = NA)
  if (runif(1) < 0.5) {
    rbind(x, row)
  } else {
    rbind(row, x)
  }
}

some_df %>% group_by(gr) %>% 
  do(add_a_row(.)) %>% 
  do( )    

因此,每个组都会添加一个空行,作为第一行或最后一行。在最后的do 中,我想将“gr”设置为其组级别。有没有办法访问组级别,所以最终的do 可以是:

 do(mutate(., gr = gr_level))

(为了清楚起见,上面只是一个用例的例子。问题是如何访问组级别,而不是如何解决上面的小问题)。

【问题讨论】:

  • 你能显示预期的输出吗?
  • 看看?group_indices。但是,在您的示例中,您将分组变量修改为 NA,从而添加了一个额外的组。
  • 完美,这正是我一直在寻找的,但找不到。谢谢!

标签: r dplyr


【解决方案1】:

我们可以通过在row创建中将NA更改为x$gr来稍微改变功能

add_a_row <- function(x) {
    row <- data_frame(gr = x$gr, value = NA)
     if (runif(1) < 0.5) {
      rbind(x, row)
     } else {
     rbind(row, x)
   }
 }

some_df %>%
     group_by(gr) %>% 
     do(add_a_row(.))
#    gr value
#    <chr> <dbl>
#1     A    NA
#2     A     3
#3     B    NA
#4     B     4

-

【讨论】:

  • 当然,这是一种方法,但我不打算解决这个特定问题。我想知道是否可以提取组级别...
  • @Edwin 我不完全确定你想要什么。这就是为什么我在你的问题下发表评论。如果是提取那么some_df %&gt;% group_by(gr) %&gt;% do(add_a_row(.)) %&gt;% .$gr %&gt;% na.omit根据你的功能
  • 因此我一直在寻找group_indices 函数。还是谢谢
  • 为了记录,我没有投反对票。但是,正如我在帖子中所写的那样。我正在寻找一种访问组级别的方法,发布的示例只是一个可以使用它的用例。感谢 konvas 和您的回答,我现在了解到,我发现这不是解决此类问题的方法,因为它会创建额外的 NA 类别。
  • @Edwin 是的,您的方法的问题在于它将 NA 显示为组中的值之一。是的,您可以使用 group_indices 函数访问组级别。但是,如果没有预期的输出,我不知道您是否只想要级别或组中的数据集
猜你喜欢
  • 2019-05-08
  • 2015-07-29
  • 1970-01-01
  • 2013-02-27
  • 2014-05-07
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2019-04-07
相关资源
最近更新 更多