Формат многоуровневого group_by в R - PullRequest
1 голос
/ 25 февраля 2020

В R, когда я запускаю этот код group_by, я получаю этот результат.

df <- tibble(y=c('a','a','a', 'b','b','b','b','b'), z=c(1,1,1,1,1,1,2,2))
df %>% group_by(z,y) %>% summarise(n())

z   y   n()
1   a   3
1   b   3
2   b   2

Есть ли способ заставить его выглядеть так?

z   y   n()
1   a   3
    b   3
2   b   2

Моя цель чтобы форматирование выглядело так, как в Pandas, где многоуровневый индекс не повторяется каждый раз (см. ниже).

enter image description here

1 Ответ

0 голосов
/ 25 февраля 2020

Вот одна из возможностей:

df <- tibble(y=c('a','a','a', 'b','b','b','b','b','a','b'), z=c(1,1,1,1,1,1,2,2,3,3))

df2 <- 
  df %>% 
  group_by(z,y) %>% 
  summarise(n = n()) %>% 
  group_by(z) %>% 
  mutate(z2 = if_else(row_number() == 1, as.character(z), " "), y, n) %>% 
  ungroup() %>% 
  transmute(z = z2, y, n)

df2 %>% 
  knitr::kable()

У меня проблемы с поиском способов сделать это, которые не включают группировку по столбцу z и поиск первой строки. К сожалению, это означает, что вам нужно добавить пару шагов, потому что переменная группировки не может быть изменена в вызове mutate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...