【问题标题】:How does one stop using rowwise in dplyr?如何在 dplyr 中停止使用 rowwise?
【发布时间】:2015-06-28 00:50:12
【问题描述】:

因此,如果希望在 dplyr 中逐行应用操作,可以使用rowwise 函数,例如:Applying a function to every row of a table using dplyr?

是否有一个unrowwise 函数可以用来逐行停止操作?目前,似乎在rowwise 删除行操作之后添加了group_by,例如

data.frame(a=1:4) %>% rowwise() %>% group_by(a)
# ...
# Warning message:
# Grouping rowwise data frame strips rowwise nature 

这是否意味着如果您希望明确删除rowwise,则应使用group_by(1)

【问题讨论】:

  • ungroup() 工作吗?
  • 我回滚了标题编辑,因为我不清楚rowwise 创建了一个grouped_df。另外,请参阅此相关问题。 github.com/hadley/dplyr/pull/553

标签: r dplyr


【解决方案1】:

您可以使用as.data.frame(),如下所示

> data.frame(a=1:4) %>% rowwise() %>% group_by(a)
# A tibble: 4 x 1
# Groups:   a [4]
      a
* <int>
1     1
2     2
3     3
4     4
Warning message:
Grouping rowwise data frame strips rowwise nature 

> data.frame(a=1:4) %>% rowwise() %>% as.data.frame() %>% group_by(a)
# A tibble: 4 x 1
# Groups:   a [4]
      a
* <int>
1     1
2     2
3     3
4     4

【讨论】:

    【解决方案2】:

    只需使用ungroup()

    以下会产生警告:

    data.frame(a=1:4) %>% rowwise() %>% 
      group_by(a)
    #Warning message:
    #Grouping rowwise data frame strips rowwise nature
    

    这不会产生警告:

    data.frame(a=1:4) %>% rowwise() %>% 
      ungroup() %>% 
      group_by(a)
    

    【讨论】:

      【解决方案3】:

      正如在 cmets 和其他答案中发现的那样,正确的做法是使用 ungroup()

      操作rowwise(df)df 的类之一设置为rowwise_df。我们可以通过检查代码here 来查看这个类的方法,它给出了以下ungroup 方法:

      #' @export
      ungroup.rowwise_df <- function(x) {
        class(x) <- c( "tbl_df", "data.frame")
        x
      }
      

      所以我们看到ungroup 并没有严格删除分组结构,而只是删除了从rowwise 函数添加的rowwise_df 类。

      【讨论】:

      • 链接不再有效 :-( 太糟糕了,代码没有被复制到这里。
      • 但是,代码块是处理取消分组的相关代码
      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      相关资源
      最近更新 更多