Расширение использования вариантов «Применить» в R

Ранее я задавал вопрос здесь Использование вариантов `apply` в R. Теперь у меня есть расширение на этот вопрос. В моих 40 переменных некоторые переменные являются категориальными. Мне нужно количество наблюдений для каждого уникального качества. Я хотел бы использовать некоторую форму apply, потому что я использовал sapply и tapply в различных частях этого кода, но это не требуется. Вот немного данных:

Age Wt  Ht  Type    Color   Width
79  134 66  C   red small
67  199 64  C   green   small
39  135 78  T   yellow  small
92  149 61  C   yellow  medium
33  138 75  T   green   medium
68  139 71  C   yellow  medium
95  198 62  T   red     large
65  132 65  T   blue    large
56  138 81  C   green   large
71  193 78  T   blue    large

Как должны выглядеть последние два столбца

        C    T
 red    1    1
 green  2    1
 blue   0    2
 yellow 2    1
 small  2    1
 medium 2    1
 large  1    3

Кроме того, я знаю, что мог бы использовать «таблицу», но как мне отправить несколько переменных по одной в Type, чтобы она выглядела примерно так? Использование table вместо apply меня устраивает.

Спасибо!


person akash87    schedule 10.06.2016    source источник


Ответы (1)


Мы можем использовать table после unlistобработки столбцов «Цвет» и «Ширина» и репликации «Типа».

Un1 <- unlist(df1[5:6])
Un2 <- df1$Type[row(df1[5:6])]

Если нам нужен заказ клиента, конвертируйте в factor и укажите levels в том же заказе.

table(factor(Un1, levels = c("red", "green", "blue", "yellow", "small",
                   "medium", "large")), Un2)
#   Un2
#         C T
#  red    1 1
#  green  2 1
#  blue   0 2
#  yellow 2 1
#  small  2 1
#  medium 2 1
#  large  1 3

Или, если order основано на order появления unique элементов в каждом из столбцов

table(factor(Un1, levels = unique(Un1)), Un2)
person akrun    schedule 10.06.2016
comment
Однако они выходят из строя. Мне по-прежнему нужны Colors вместе и Widths вместе. На самом деле они располагаются в алфавитном порядке. - person akash87; 10.06.2016
comment
@akash87 Можешь проверить сейчас - person akrun; 10.06.2016
comment
Выглядит хорошо, но у меня есть 15 таких переменных, поэтому перечислить все уровни будет непросто. Я думал об использовании sapply(df[5:6], unique), но это возвращает матрицу. Есть еще мысли? И спасибо за помощь! - person akash87; 10.06.2016
comment
@ akash87 На самом деле это было бы factor(Un1, levels = unique(Un1)), но в ожидаемом результате это все еще заказ клиента (если ваш чек blue предшествует yellow) - person akrun; 10.06.2016
comment
@ akash87 akash87 Можете ли вы обновить ожидаемый результат в посте, так как он не ясен. - person akrun; 10.06.2016
comment
Я не хотел отклонять вопрос. Но да, вы правы, это еще один вопрос, на который я все равно нашел ответ. - person akash87; 10.06.2016