Получить количество всех комбинаций, созданных в столбце при группировании по другому столбцу в df с различными комбинациями длины в R

#r

#r

Вопрос:

Пример фрейма данных

 Guest <- c("ann","ann","beth","beth","bill","bill","bob","bob","bob","fred","fred","ginger","ginger")
State <- c("TX","IA","IA","MA","AL","TX","TX","AL","MA","MA","IA","TX","AL")
df <- data.frame(Guest,State)
 

Желаемый результат

введите описание изображения здесь

Я перепробовал около дюжины разных идей, но не приблизился. Ближайший настраивал перекрестную таблицу, но не знал, как получить подсчеты из этого. Длинный / широкий меня ни к чему не привел. и т.д. Я думаю, слишком новый, чтобы думать из коробки.

Ответ №1:

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

 library(dplyr)
library(tidyr)
#Code
new <- df %>%
  arrange(Guest,State) %>%
  group_by(Guest) %>%
  summarise(Chain=paste0(State,collapse = '-')) %>%
  group_by(Chain,.drop = T) %>%
  summarise(N=n())
 

Вывод:

 # A tibble: 4 x 2
  Chain        N
  <chr>    <int>
1 AL-MA-TX     1
2 AL-TX        2
3 IA-MA        2
4 IA-TX        1
 

Комментарии:

1. Это сработало отлично. Мне пришлось удалить дублирование между двумя задействованными значениями, чтобы получить результат точно по мере необходимости. Спасибо

2. @Bruce Фантастика! Всегда приятно помогать 🙂

Ответ №2:

Мы можем использовать base R с aggregate и table

 table(aggregate(State~ Guest, df[do.call(order, df),], paste, collapse='-')$State)
 

-вывод

 #  AL-MA-TX    AL-TX    IA-MA    IA-TX 
#     1        2        2        1