【问题标题】:How to aggregate a factor at each level of another factor, grouping by two other factors in disaggregated data如何在另一个因子的每个级别聚合一个因子,在分类数据中按其他两个因子分组
【发布时间】:2016-03-23 15:57:29
【问题描述】:

假设有跨选举年、地区(或州)和政党的候选人的描述性数据。这些数据目前在“街道”级别(例如投票区)进行分解。

目前,当我尝试将数据汇总到地区级别时,各种方法返回的计数不准确。换句话说,聚合没有充分考虑到候选人在每个地区每年多次出现在数据中。我需要的是一个特定党派出现在特定地区的总次数,而不管选区级别的重复/重复信息如何。换句话说,我需要一个结果来显示每个独特的候选人年对子的地区年对子的党派人数。 (注意:候选人可能会在选举年和/或选区重复,但可能有不同的政党;Henry Clay 在 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 接近所需的最终结果,但返回的计数未指定因子级别(政党),并且仍然基于政党候选人在选区级别的外观“过度计算”政党区域数据给定年份。

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])?

【问题讨论】:

    标签: r aggregate grouping apply tabular


    【解决方案1】:

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

    cross.tab<-unique(sample[c("V3", "V4", "V1", "V2")])
    
    party.counts<-aggregate(. ~ V3:V4:V1, cross.tab, length)
    

    感谢任何有关可推广性和/或矢量化以及易于合并到先前(原始)数据结构中的帮助或建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多