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

#r

Вопрос:

Используя приведенный ниже пример фрейма данных df :

 library(dplyr)

df <- data.frame(ID=c("A", "A", "B", "C", "C", "C"),
                 Color=c("red", "green", "red", "red", "blue", "red"),
                 Size=c("s", "s", "m", "m", "s", "m"),
                 Country=c("UK", "US", "US", "US", "AUS", "CA")) %>% 
dplyr::arrange(across(everything()))

df
  ID Color Size Country
1  A green    s      US
2  A   red    s      UK
3  B   red    m      US
4  C  blue    s     AUS
5  C   red    m      CA
6  C   red    m      US
 

Я суммирую количество ID элементов на Color , а также на Size и Country в следующем формате, используя tableby функцию из arsenal пакета:

 library(arsenal)

tableby(Color ~ Size   Country, df, test=F, total=F) %>% 
summary()
|                      | blue (N=1) | green (N=1) | red (N=4) |
|:---------------------|:----------:|:-----------:|:---------:|
|**Size**              |            |             |           |
|amp;nbsp;amp;nbsp;amp;nbsp;m   |  0 (0.0%)  |  0 (0.0%)   | 3 (75.0%) |
|amp;nbsp;amp;nbsp;amp;nbsp;s   | 1 (100.0%) | 1 (100.0%)  | 1 (25.0%) |
|**Country**           |            |             |           |
|amp;nbsp;amp;nbsp;amp;nbsp;AUS | 1 (100.0%) |  0 (0.0%)   | 0 (0.0%)  |
|amp;nbsp;amp;nbsp;amp;nbsp;CA  |  0 (0.0%)  |  0 (0.0%)   | 1 (25.0%) |
|amp;nbsp;amp;nbsp;amp;nbsp;UK  |  0 (0.0%)  |  0 (0.0%)   | 1 (25.0%) |
|amp;nbsp;amp;nbsp;amp;nbsp;US  |  0 (0.0%)  | 1 (100.0%)  | 2 (50.0%) |
 

Однако я не получаю количество уникальных ID значений на коэффициент независимо от другого (например, есть только 2 уникальных ID B и C с цветом red и размером m , хотя действительно есть 3 строки с цветом red и размером m ).
Есть ли способ выполнить эту задачу?

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

1. Но вы делаете группу по размеру и стране

2. Да, но я пытаюсь (1) сгруппировать цвет по размеру, (2) независимо от цвета по стране, а затем (3) получить формат таблицы.

3. Если он независим, то вам может понадобиться цикл map(c("Size", "Country"), ~ tableby(reformulate(.x, response = 'Color'), df, test = FALSE, total = FALSE) %>% summary)