我想根据数据框中缺少的数据向我正在使用的数据框添加新行。
以下是数据框示例。
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)
感谢您的帮助!
答案 0 :(得分:1)
以下是使用expand.grid
和merge
的基本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))