【问题标题】:Inserting missing years to complete a data.frame插入缺失的年份以完成 data.frame
【发布时间】:2018-09-01 03:44:23
【问题描述】:

我正在创建一个数据框,其中包含从 2000 年到 2010 年每年在每个州发生的某种事件的数量(假设它们是枪支事件):

states <- c('Texas', 'Texas', 'Arizona', 'California', 'California')
incidents <- c(1, 1, 2, 1, 4)
years <- c(2000, 2008, 2004, 2002, 2007)

DF <- data.frame(states, incidents, years)

> DF
      states incidents years
1      Texas         1  2000
2      Texas         1  2008
3    Arizona         2  2004
4 California         1  2002
5 California         4  2007

我想插入行来完成数据集,例如2001 年、2002 年、2003 年、... 2007 年以及 2009 年和 2010 年的德克萨斯州归零。同样,亚利桑那州除了 2004 年以外的所有年份都归零。加利福尼亚州也是如此。

我该怎么做?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    您可以使用tidyr::complete 填写缺失的年份(2010:2010),并使用0 填写值。

    library(tidyr)
    DFfilled <- DF %>%
        complete(states, years = 2000:2010, 
                 fill = list(incidents = 0)) %>%
        as.data.frame()
    

    PS:
    如果您的数据中有年份为2010 的条目(现在最多只有2008),您可以使用full_seq(years, 1) 而不是2000:2010

    【讨论】:

      【解决方案2】:

      我会通过使用DF 创建一个人工的data.framemerge 这个data.frame:

      states <- c('Texas', 'Texas', 'Arizona', 'California', 'California')
      incidents <- c(1, 1, 2, 1, 4)
      years <- c(2000, 2008, 2004, 2002, 2007)
      
      DF <- data.frame(states, incidents, years)
      
      tmp <- data.frame(years=rep(seq(min(DF$years), 
                                max(DF$years)),
                                each=length(unique(DF$states))), 
                        states=unique(DF$states) )
      DF2 <- merge(DF, tmp, by=c('years','states'),all=T)
      DF2[is.na(DF2$incidents),]$incidents <- 0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-06
        • 2021-07-20
        • 2022-12-03
        • 2023-04-05
        • 2013-07-10
        • 1970-01-01
        • 1970-01-01
        • 2016-04-11
        相关资源
        最近更新 更多