Как мне отформатировать тиблы? - PullRequest
0 голосов
/ 21 января 2019

Я хотел бы сделать таблицу, которая выглядит следующим образом

enter image description here

У меня есть отметки с каждой из точек данных, но они не объединены.

library('dplyr')
library('ISLR')

data(Hitters)

Hitters <- na.omit(Hitters)

Q <- Hitters %>% group_by(League) %>% 
  dplyr::summarize(count = n(), avg_wage = sum(Salary)/n())

A <- Hitters %>% group_by(Division) %>% 
  dplyr::summarize(count = n(), avg_wage = sum(Salary)/n())

Z <- Hitters %>% group_by(NewLeague) %>% 
  dplyr::summarize(count = n(), avg_wage = sum(Salary)/n())

Моя цель состоит в том, чтобы сложить столбцы друг над другом в один вывод с общими столбцами «count» и «avg_wage». Я попытался bind_rows () и ftable (), но безуспешно.

1 Ответ

0 голосов
/ 21 января 2019

Проблема в том, что вы не можете комбинировать строки с разными именами столбцов, так что в итоге получается запутанный кадр данных. Вместо этого мы можем использовать gather(), чтобы создать два новых столбца и получить правильную таблицу.

library(tidyverse)
library(ISLR)

data(Hitters)

Hitters <- na.omit(Hitters)

Q <- Hitters %>% group_by(League) %>% 
  dplyr::summarize(count = n(), avg_wage = sum(Salary)/n())

A <- Hitters %>% group_by(Division) %>% 
  dplyr::summarize(count = n(), avg_wage = sum(Salary)/n())

Z <- Hitters %>% group_by(NewLeague) %>% 
  dplyr::summarize(count = n(), avg_wage = sum(Salary)/n())

list(Q,A,Z) %>% 
  map_df(bind_rows) %>% 
  gather("league_type", "league_id", c(1, 4, 5)) %>% 
  filter(!is.na(league_id))
#> Warning: attributes are not identical across measure variables;
#> they will be dropped
#> # A tibble: 6 x 4
#>   count avg_wage league_type league_id
#>   <int>    <dbl> <chr>       <chr>    
#> 1   139     542. League      A        
#> 2   124     529. League      N        
#> 3   129     624. Division    E        
#> 4   134     451. Division    W        
#> 5   141     537. NewLeague   A        
#> 6   122     535. NewLeague   N

Создано в 2019-01-21 пакетом Представить (v0.2.1)

Вы можете использовать spread(), чтобы вернуть его в широкоформатный формат, хотя я бы посоветовал против этого. С длинной версией, вероятно, будет легче работать.

...