【问题标题】:How to create new rows in a data frame based on missing data in R如何根据 R 中的缺失数据在数据框中创建新行
【发布时间】:2016-08-26 02:36:12
【问题描述】:

我想根据数据框中缺少的数据向我正在使用的数据框添加新行。

这是一个示例数据框。

year <- c(2001,2001,2002,2002,2003,2004,2004,2005)
make <- c('Honda', 'Ford', 'Honda', 'Ford', 'Honda', 'Honda', 'Ford', 'Honda')
number_manufactured <- c(10, 20, 15, 47, 14, 19, 35, 9)

cars <- data.frame(year, make, number_manufactured)

我想在数据框中为 number_manufactured = 0 缺失的值添加一行,例如: (2003, 福特, 0) 和 (2005, 福特, 0)

我想要的数据框是这样的:

year <- c(2001,2001,2002,2002,2003,2003,2004,2004,2005,2005)
make <- c('Honda', 'Ford', 'Honda', 'Ford', 'Honda','Ford', 'Honda', 'Ford', 'Honda', 'Ford')
number_manufactured <- c(10, 20, 15, 47, 14, 0, 19, 35, 9, 0)

cars <- data.frame(year, make, number_manufactured)

感谢您的帮助!

【问题讨论】:

    标签: r


    【解决方案1】:

    这是使用expand.gridmerge 的基本R 方法。

    # get new data.frame
    dfNew <- merge(cars, expand.grid(unique(cars$year), unique(cars$make)), 
                   by.x=c("year", "make"), by.y=c("Var1", "Var2"), all=TRUE)
    # fill in 0s
    dfNew$number_manufactured[is.na(dfNew$number_manufactured)] <- 0
    

    expand.grid 返回一个包含两个向量的所有组合的 data.frame。在这里,它被喂食了独特的年份和制造水平。这被合并到原始 data.frame 以生成新的 data.frame,使用 all=TRUE 参数包含新的观察结果。对于制造的数量,新的观察结果是 NA,因此第二行将这些转换为 0。

    【讨论】:

      【解决方案2】:

      tidyr::complete 对这类事情很方便。您列出要为其添加行的数据集中的变量。您还可以通过fill 列出您想要填充其他变量的内容(默认情况下您会获得NA)。

      library(tidyr)
      complete(cars, year, make, fill = list(number_manufactured = 0))
      

      【讨论】:

        猜你喜欢
        • 2023-01-16
        • 1970-01-01
        • 1970-01-01
        • 2019-04-17
        • 2020-10-03
        • 1970-01-01
        • 2014-12-31
        • 2016-08-06
        • 1970-01-01
        相关资源
        最近更新 更多