Сводка по нескольким факторизованным столбцам

Я пытаюсь суммировать несколько столбцов фрейма данных, каждый из которых содержит данные с одинаковыми уровнями, в более простой для работы формат.

Я начинаю с фрейма данных, аналогичного приведенному ниже, в котором разные люди зарегистрировали свое удовлетворение рядом аспектов своей жизни:

person=as.factor(c("Jack","Jack","John","Jill"))
job=as.factor(c("happy","sad","very happy","sad"))
home=as.factor(c("happy","sad","very happy","happy"))
car=as.factor(c("happy","sad","sad","happy"))

df<-data.frame(person,job,home,car)

введите здесь описание изображения

Я хочу преобразовать это, чтобы оно отображалось в следующем формате:

введите здесь описание изображения

Я считаю, что в будущем с этим будет легче работать в R, а также другим пользователям в Excel.

Я попытался расплавить / отлить данные и использовать функции table () и count (), но мне не удалось добиться результата.


person dscm    schedule 29.10.2015    source источник


Ответы (1)


Это похоже на обман, но вот попытка использовать reshape2::recast, который является просто melt/dcast оболочкой

library(reshape2)
recast(df, variable ~ value, id.var = 1L)
# Aggregation function missing: defaulting to length
#   variable happy sad very happy
# 1      job     1   2          1
# 2     home     2   1          1
# 3      car     2   2          0

Или, если данные очень большие, мы могли бы также реализовать data.table эквивалент

library(data.table)
dcast(melt(setDT(df), 1L), variable ~ value)
# Aggregate function missing, defaulting to 'length'
#    variable happy sad very happy
# 1:      job     1   2          1
# 2:     home     2   1          1
# 3:      car     2   2          0

В обоих методах вы можете указать fun.aggregate = для разных функций агрегирования.

person David Arenburg    schedule 29.10.2015
comment
Спасибо - это точно отвечает на вопрос. - person dscm; 30.10.2015