如何在另一个因素的每个级别汇总一个因子,按分解数据中的另外两个因素进行分组

时间:2016-03-23 15:57:29

标签: r aggregate grouping apply tabular

假设选举年,地区(或州)和政党的候选人都有描述性数据。这些数据目前在“分区”中进行了分解。等级(比如投票区)。

目前,当我尝试将数据聚合到区级时,各种方法返回的计数不准确。换句话说,聚合没有充分考虑到候选人每个地区每年多次出现在数据中。我需要的是特定区域在特定区域出现的次数的总计数,无论区域级别的重复/重复信息如何。换句话说,我需要一个结果,显示每个独特的候选年度二元组的区年二元组的派对数量。 (注意:候选人可能在选举年和/或地区重复,但可能有不同的政党;亨利克莱在1836年和1840年)。

我的问题是: 如何通过将另外两个因素(年份和候选人名称[ID]分组来汇总数据以获取另一个因子(区)的每个级别的因子(方)的计数])?

数据结构样本:

year<-rbind("1836", "1836", "1836", "1836", 
            "1840", "1840", "1840", "1840", 
            "1844", "1844", "1844", "1844", 
            "1848", "1848", "1848", "1848")

candidate<-rbind("Henry Clay", "Henry Clay", 
                 "Daniel Webster", 
                 "Daniel Webster", "Henry Clay", 
                 "Henry Clay", "Daniel Webster", 
                 "Daniel Webster", 
                 "Millard Fillmore", 
                 "Millard Fillmore", 
                 "Martin Van Buren", 
                 "Martin Van Buren", 
                 "Millard Fillmore", 
                 "Millard Fillmore", 
                 "Martin Van Buren", 
                 "Martin Van Buren")

party<-rbind("Democratic-Republican", 
             "Democratic-Republican", "Whig", 
             "Whig", "National Republican", 
             "National Republican", "Whig", 
             "Whig", "Know-Nothing", 
             "Know-Nothing", "Democrat", 
             "Democrat", "Know-Nothing", 
             "Know-Nothing", "Democrat", 
             "Democrat")

district<-rbind("Alaska", "Alaska", "Vermont", 
                "Vermont", "Alaska", "Alaska", 
                "Vermont", "Vermont", "Alaska", 
                "Alaska", "Vermont", "Vermont", 
                "Alaska", "Alaska", "Vermont", 
                "Vermont")

precinct<-rbind("Pre1", "Pre2", "Pre1", "Pre2", 
                "Pre1", "Pre2", "Pre1", "Pre2", 
                "Pre1", "Pre2", "Pre1", "Pre2", 
                "Pre1", "Pre2", "Pre1", "Pre2")

sample<-as.data.frame(cbind(year, candidate, party, district, 
              precinct))

汇总数据的不同方法的示例:

party.counts1<-data.frame(table(sample$V3, sample$V1, sample$V4))

骨料:

尝试2a接近所需的最终结果,但返回计数未指定因子级别(聚会)并且仍然超过计数&#39;根据特定年份的党候选人的区域级别出现的党区数据。

party.counts2<-aggregate(sample$V3, by=list(sample$V4, sample$V1), FUN=length)

party.counts2a<-aggregate(sample$V3~sample$V1:sample$V4:sample$V2, data=sample, FUN=length)

重塑

重塑示例显示与先前的聚合2a尝试类似的问题。

library(reshape2)
mdata <- melt(sample, id.vars=c("V1", "V2", "V4", "V5"), measure.vars=c("V3"))

party.counts3<-dcast(mdata, value~V1:V2:V4, length)

同样,我的问题是: 如何通过将另外两个因素(年份和候选人名称)分组来汇总数据以获得另一个因子(地区)每个级别的因子(方)的计数[ID])?

1 个答案:

答案 0 :(得分:0)

到目前为止,这是一个解决方案,但它不是很整洁。例如,构造的count变量在最终对象中被错误标记为聚合命令中的省略变量(此处为V2)。此外,结果包含在单独的对象(party.counts)中,而不是与原始数据(上面标记为sample的对象)合并。

cross.tab<-unique(sample[c("V3", "V4", "V1", "V2")])

party.counts<-aggregate(. ~ V3:V4:V1, cross.tab, length)

对于普遍性和/或矢量化以及易于纳入先前(原始)数据结构的任何帮助或建议表示赞赏。