アメリカの 50 州すべての 50 大都市での殺人件数を示す 5 年間のデータを含むデータフレームがあるとします。データフレームには、その都市の人口と所有する銃の数も含まれています。ただし、各行には次の 1 つしかありませんpopulation, homicides or guns
(df
以下の例を参照)。
> df1 = data.frame(state=1:50, city=rep(1:50, each=50), year=rep(1:5, each=2500), population=sample(1000:200000,12500), homicides=NA, guns=NA)
> df2 = data.frame(state=1:50, city=rep(1:50, each=50), year=rep(1:5, each=2500), population=NA, homicides=sample(1:200,12500,replace=T), guns=NA)
> df3 = data.frame(state=1:50, city=rep(1:50, each=50), year=rep(1:5, each=2500), population=NA, homicides=NA, guns=round((df1$population/sample(2:20,12500,replace=T))))
> df = rbind(df1, df2, df3)
この結果のデータフレームは、必要以上に 25,000 行長くなります。これは、一意の組み合わせを表す各行に 1 つではなくデータstate, city and year
が含まれる可能性があるためです。population, homicide and guns
つまり、次のようになります。
df.ideal = data.frame(state=1:50, city=rep(1:50, each=50), year=rep(1:5, each=2500), population=sample(1000:200000,12500), homicides=sample(1:200,12500,replace=T), guns=round((df1$population/sample(2:20,12500,replace=T))))
から始めてdf
、どのようにデータ行をマージして、組み合わせpopulation, guns and homicides
ごとに 1 つの行を作成できますか? state, city, year
したがって、 df.ideal になります
悲しいことに、このソリューションはバランスの取れていないデータフレームでも機能する必要があります。理想的な世界では、値が NA 以外のものを置き換えたときに警告が表示されれば素晴らしいでしょう。