#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