如何在dplyr中停止使用rowwise?

Ale*_*lex 36 r dplyr

因此,如果希望在dplyr中逐行应用操作,可以使用该rowwise函数,例如:使用dplyr将函数应用于表的每一行?

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

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

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

Ale*_*lex 49

正如在评论和其他答案中找到的,正确的方法是使用ungroup().

操作rowwise(df)设置的类别之一dfrowwise_df.我们可以通过检查这里的代码来看到这个类的方法,它提供了以下ungroup方法:

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

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


Rti*_*ist 8

只需使用 ungroup()

以下产生警告:

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

这不会产生警告:

data.frame(a=1:4) %>% rowwise() %>% 
  ungroup() %>% 
  group_by(a)
Run Code Online (Sandbox Code Playgroud)


ish*_*est 7

您可以使用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
Run Code Online (Sandbox Code Playgroud)