2016-07-28 14 views
1

データフレームにないデータに基づいて、私が作業しているデータフレームに新しい行を追加したいと思います。データフレームに欠落しているデータに基づいて新しい行を作成する方法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) 

Iのような= 0 number_manufacturedで欠落している値のデータフレームに行を追加したい: (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) 

ありがとうございます!

答えて

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 2つのベクトルの全ての組み合わせとdata.frameを返します。ここでは、それは年のユニークなレベルとメイクです。これは元のdata.frameにマージされ、新しいdata.frameが生成されます。新しい観測値は、all = TRUE引数を使用して含まれます。新たな観測値は製造された数に対してNAであるため、2行目はこれらを0に変換します。

+0

これは美しく機能しました。ありがとうございました!!! –

0

tidyr::completeはこの種のものにとって便利です。行を追加するデータセット内の変数を一覧表示します。また、他の変数に何を入力するかを指定することもできます(デフォルトでNAが得られます)。fill

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

この単純なtidyr completeコマンドは、その日を保存します。あなたの知識を共有してくれてありがとう。

関連する問題