Хобрук: Ваш путь к мастерству в программировании

Можем ли мы сгруппировать по нескольким столбцам в одной и той же функции с R?

Используя этот набор данных:

sex <- c("M","F","M","M","F","F","F","M","M","F") 
school <- c("north","north","central","south","south","south","central","north","north","south")
school_type <- c("high","high","primary","secondary","secondary","secondary","primary","high", "high","secondary")
days_missed <- c(5,1,2,0,7,1,3,2,4,15)

df <- data.frame(sex, school, school_type,days_missed, stringsAsFactors = F)

col1 <- c( 'school_type')
col2 <- c('school','sex')

Можем ли мы разделить фрейм данных на col1, а затем сгруппировать каждый полученный фрейм данных на col2, чтобы создать вывод, например:

$high .x
school      sex     sum
north       F       1
north       M       11

$primary .x
school      sex     sum
central     F       3
central     M       2

$seconday .x
school      sex     sum
south       F       23
south       M        0

Я старался:

purrr::map(.x=col1, .f = ~df %>% group_by_at(.x) %>%group_by(col2) %>% summarise(sum = sum(days_missed)))

Вход и предложения приветствуются

03.06.2020

  • Важно ли, чтобы результатом был список из 3 фреймов данных, или это может быть только один фрейм данных, подобный этому df %>% group_by(school_type, school, sex) %>% summarise(days_missed = sum(days_missed))? 03.06.2020
  • Да, важно, чтобы каждый из 3 фреймов данных оставался отдельным 03.06.2020

Ответы:


1

в базе R вы можете сделать:

xtabs(reformulate(c(col2,col1),"days_missed"),df) 

если ваша версия R> 4.0.0, вы можете включить функцию asplit, чтобы иметь ее в виде списка:

asplit(xtabs(reformulate(c(col2,col1),"days_missed"),df),3)

$high
         sex
school    F  M
  central 0  0
  north   1 11
  south   0  0

$primary
         sex
school    F M
  central 3 2
  north   0 0
  south   0 0

$secondary
         sex
school     F M
  central  0 0
  north    0 0
  south   23 0
03.06.2020

2
  • Также можно использовать group_split, например. df %>% group_by(school_type, school, sex) %>% summarise(days_missed = sum(days_missed)) %>% group_by(school_type) %>% group_split 03.06.2020
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..