У меня есть кадр данных, который содержит информацию о финансовых взносах политическим кандидатам (обозначенным в данных как «канд») и политическим организациям (обозначенным в данных как «комм»). Фрейм данных также включает уникальный идентификатор для каждого участника, при этом каждая строка в данных обозначает один сделанный вклад. Что я хочу сделать, так это получить перекрестную таблицу, которая показывает для каждой политической (некандидатской) организации, сколько доноров этих организаций также внесли свой вклад в каждого политического кандидата в фрейме данных. Фрейм данных выглядит так:
contributor ID . organization
1 cand1
2 cand2
3 comm1
3 cand1
4 cand1
5 cand2
5 cand1
5 comm2
То, что я хочу создать, выглядит примерно так:
Comm . Cand
Cand1 . Cand2
Comm1 1 0
Comm2 1 1
(Поскольку 1 человек — идентификатор № 3 — внес вклад как в comm1, так и в cand1, а 1 человек — идентификатор № 5 — внес вклад в comm1, cand1 и cand2.)
Я думал о способах сделать это с помощью агрегата или dplyr, но я не уверен. У кого-нибудь есть советы?
crossprod(table(dat))
- как в здесь- и соответственно подмножество, напримерcrossprod(table(dat))[startsWith(levels(dat$org), "comm"), startsWith(levels(dat$org), "cand")]
- person alexis_laz   schedule 27.11.2016library(Matrix); tab = xtabs( ~ contributorID + organization, dat, sparse = TRUE); crossprod(tab[, startsWith(colnames(tab), "comm")], tab[, startsWith(colnames(tab), "cand")])
- person alexis_laz   schedule 27.11.2016