В строке ответа @ NelsonGon, используя n()
, перед подсчетом вы захотите посчитать:
library(tidyverse)
packing <- tribble(
~Person, ~Month, ~Item,
"Adam", 1, "Shoe",
"Adam", 1, "Hat",
"Frank", 1, "Hat",
"Frank", 1, "Shoe"
)
packing %>%
group_by(Person, Month) %>%
summarise_all(funs(N = n(), Item = toString(unique(.))))
# A tibble: 2 x 4
# Groups: Person [?]
Person Month N Item
<chr> <dbl> <int> <chr>
1 Adam 1 2 Shoe, Hat
2 Frank 1 2 Hat, Shoe
За проницательный комментарий @ IceCreamToucan, если ваш Items
в каждом Person
и Month
не являются уникальными, вы можете получить результат, который на N
больше, чем кажущаяся длина вашего списка элементов, разделенных запятыми (из-за отсутствия лучшего термина).Вы можете использовать N = length(unique(.))
, чтобы избежать этого.
Чтобы ответить на ваш отредактированный вопрос:
packing %>%
group_by(Person, Month) %>%
arrange(Item) %>%
summarise_all(funs(N = n(), Item = toString(unique(.)))) %>%
ungroup %>% group_by(Item) %>%
summarize(N = n())
# A tibble: 2 x 2
Item N
<chr> <int>
1 Belt 2
2 Hat, Shoe 3
Сначала вам нужно будет отсортировать по arrange
, чтобы избежать того же списка.переставлять разные способы.Затем удалите оставшуюся группировку, перегруппируйте ее с помощью Item
и суммируйте соответствующим образом.
Кроме того, «список» - это очень особенное слово в R, поэтому путаница перед вашим первоначальным редактированием.Возможно, стоит почитать этот раздел из книги Хэдли Уикхема R для Data Science , если вы хотите продолжить исследование.