簡體   English   中英

如何基於R中丟失的數據在數據框中創建新行

[英]How to create new rows in a data frame based on missing data in 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,Ford,0)和(2005,Ford,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)

謝謝您的幫助!

這是使用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。

tidyr::complete對於此類事情很方便。 您在要為其添加行的數據集中列出變量。 你也可以列出你想(默認情況下你得到填補其他變量是什么NA通過) fill

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM