如何基于R中的缺失数据在数据框中创建新行

时间:2016-07-28 16:06:59

标签: r

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

以下是数据框示例。

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)

感谢您的帮助!

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

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

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