Подтвердить что ты не робот

Как прекратить использование rollise в dplyr?

Итак, если вы хотите применить операцию row by row в dplyr, можно использовать функцию rowwise, например: Применение функции к каждой строке таблицы, используя dplyr?

Есть ли функция unrowwise, которую вы можете использовать для прекращения выполнения операций по строкам? В настоящее время кажется, что добавить group_by после rowwise удаляет операции с строкой, например

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

Означает ли это, что следует использовать group_by(1), если вы хотите явно удалить rowwise?

4b9b3361

Ответ 1

Как указано в комментариях и другом ответе, правильный способ сделать это - использовать ungroup().

Операция rowwise(df) устанавливает один из классов df как rowwise_df. Мы можем видеть методы этого класса, изучая код здесь, который дает следующий метод ungroup:

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

Итак, мы видим, что ungroup не является строго удалением сгруппированной структуры, вместо этого он просто удаляет класс rowwise_df, добавленный из функции rowwise.

Ответ 2

Вы можете использовать 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