Подсчитать количество строк на основе 3 уникальных условий с множеством (более 50) возможных комбинаций - PullRequest
0 голосов
/ 09 октября 2018

У меня есть некоторые данные, где каждая строка представляет один цветок.Я пытаюсь подсчитать количество строк в кадре данных на основе 3 переменных.Вот пример того, как выглядят данные.

 ï..petal_size stem_length flow_color
1         large         long      red  
2         small        short     orange
3         large        short     yellow
4          small        long       blue
5         large       short       green
6          small       long     indigo 
7         large        short     violet
8          small        long      red  
9         large       short      orange
10         small      short      yellow
11        large         long       blue
12         small        long      green
13        large         long    indigo 
14         small       short     violet
15        large         long      red  
16        large         long     orange
17        large         long     yellow
18         small      short        blue
19         small        long      green
20         small       short    indigo 
21        large         long     violet

Сложность в том, что мне нужен код, который будет суммировать количество строк для каждой возможной комбинации, и существует множество возможных комбинаций.Возможные комбинации основаны на значениях в 3 различных столбцах: цвет цветка (7 значений), petal_length (2 значения) и stem_length (2 значения).Затем я хотел бы подсчитать эти значения, либо добавив их в матрицу, которая выглядит следующим образом:

enter image description here

Я мог бы, вероятно, написатьТройной цикл for для каждой переменной или серия длинных операторов if с несколькими условиями, но это звучит так, как будто это потребует много строк кода и будет неэффективным в вычислительном отношении.Полный окончательный набор данных будет очень большим, поэтому это не жизнеспособное решение.Как бы я поступил так?

1 Ответ

0 голосов
/ 09 октября 2018

Если ваши данные находятся в кадре данных, то функция ftable обеспечивает именно то, что нужно:

ftable(dat, row.vars="flow_color")
#-------
           petal_size  large       small      
           stem_length  long short  long short
flow_color                                    
blue                       1     0     1     1
green                      0     1     2     0
indigo                     1     0     1     1
orange                     1     1     0     1
red                        2     0     1     0
violet                     1     1     0     1
yellow                     1     1     0     1

Вот еще один возможный путь.«Лучший» ответ включал табличный пакет: Использование атрибутов `ftable` для извлечения данных

...