Перекрестные таблицы с данными.таблица в R [дубликат]
этот вопрос уже есть ответ здесь:
Я люблю данные.пакет таблицы в R, и я думаю, что это может помочь мне выполнить сложные задачи перекрестной табуляции, но не выяснили, как использовать пакет для выполнения задач, подобных table
.
вот некоторые данные опроса репликации:
opinion <- c("gov", "market", "gov", "gov")
ID <- c("resp1", "resp2", "resp3", "resp4")
party <- c("GOP", "GOP", "democrat", "GOP")
df <- data.frame(ID, opinion, party)
в таблицах подсчет количества мнений по партиям так же прост, как table(df$opinion, df$party).
мне удалось сделать что-то похожее на сведения.таблица, но результат неуклюжий, и он добавляет отдельный столбец.
dt <- data.table(df)
dt[, .N, by="party"]
существует ряд операций группировки в данных.таблица, которая может быть отличной для быстрых и сложных перекрестных таблиц данных опроса, но я не нашел никаких учебников о том, как это сделать. Спасибо за любую помощь.
1 ответов
можно использовать dcast
С data.table
(см. эффективная переформовка с использованием данных.таблицы виньетка на проект wiki или страница проекта CRAN).
dcast(dt, opinion~party, value.var='ID', length)
критерии
если мы используем немного больший набор данных и сравниваем скорость с помощью dcast
С reshape2
и data.table
set.seed(24)
df <- data.frame(ID=1:1e6, opinion=sample(letters, 1e6, replace=TRUE),
party= sample(1:9, 1e6, replace=TRUE))
system.time(dcast(df, opinion ~ party, value.var='ID', length))
# user system elapsed
# 0.278 0.013 0.293
system.time(dcast(setDT(df), opinion ~ party, value.var='ID', length))
# user system elapsed
# 0.022 0.000 0.023
system.time(setDT(df)[, .N, by = .(opinion, party)])
# user system elapsed
# 0.018 0.001 0.018
третий вариант немного лучше, но он находится в "длинном" формате. Если OP хочет иметь "широкий" формат, the data.table
dcast
можно использовать.
примечание: Я использую версию devel, т. е. v1.9.7
, но кран должен быть достаточно быстрым.