Как прекратить использование 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
?
Ответы
Ответ 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