1
加重データを含むグループ別に2種類の頻度テーブルを計算したいと考えています。加重データを含むグループ別の頻度テーブルR
次のコードで再現性のあるデータを生成することができます:まず
Data <- data.frame(
country = sample(c("France", "USA", "UK"), 100, replace = TRUE),
migrant = sample(c("Native", "Foreign-born"), 100, replace = TRUE),
gender = sample (c("men", "women"), 100, replace = TRUE),
wgt = sample(100),
year = sample(2006:2007)
)
、私は国や年によって(ネイティブVS外国生まれ)移民ステータスの頻度表を計算してみてください。私は、パッケージquestionr
とplyr
を使用して、次のコードを書いた:
db2006 <- subset (Data, year == 2006)
db2007 <- subset (Data, year == 2007)
result2006 <- as.data.frame(cprop(wtd.table(db2006$migrant, db2006$country, weights=db2006$wgt),total=FALSE))
result2007 <- as.data.frame(cprop(wtd.table(db2007$migrant, db2007$country, weights=db2007$wgt),total=FALSE))
result2006<-rename (result2006, c(Freq = "y2006"))
result2007<-rename (result2007, c(Freq = "y2007"))
result <- merge(result2006, result2007, by = c("Var1","Var2"))
私の本当のデータベースでは、それはすべての年のために、このコードを適用するには時間がかかるので、私は10年以上持っています。誰かがそれを行うより速い方法を知っていますか?
私はまた、移住者の地位に占める女性と男性の国と地域別のシェアを計算したいと考えています。私は次のようなものを探しています:
Var1 Var2 Var3 y2006 y2007
Foreign born France men 52 55
Foreign born France women 48 45
Native France men 51 52
Native France women 49 48
Foreign born UK men 60 65
Foreign born UK women 40 35
Native UK men 48 50
Native UK women 52 50
私はこれらの結果をどのように得ることができるのでしょうか?
TIL about 'Reduce()' – roman
回答には多くの感謝の@ulfelderが、私はそれにいくつかの問題を抱えていました。私がコードを実行すると、2006年と2007年の結果はまったく同じですが、これは正しくありません。どうすれば改善できるのか分かりますか?性別に関する情報をどのように追加することができますか? –
申し訳ありません、投稿したばかりの編集版をお試しください。私は、関数の入力に列と同じ名前を付けることによって 'dplyr'を混乱させていたと思います。残念ながら、私はあなたがこのアプローチにジェンダーを加えることはできないと思っています。「wtd.table」は双方向のクロス集計を可能にするだけであるためです。そして、私は、これらの重みが代替ソリューションを提案するために何をしているのか十分に分かっていません。 – ulfelder