提案された答え
データが提供されなかったので (しかしヒントが与えられた)、データフレームを生成し、それらのヒントA
にB
基づいて (つまり、X->Age(Int); Y->Race(Factor); Z->?(Int)、おそらく人口?) . また、データフレーム A と B が R セッション ワークスペースに既に読み込まれていると仮定します。次に、アイテムが連続していないと仮定しますが、実際には( c、d )によって生成されたサンプルに対して ( a、b、e ) を実行したいと考えています。あれは:
- ステップ 1 B の観測ごとに A の 10 個の観測を含め、 dataframe として保存します
moreA
。
- Setp 2 A の観測数が B と等しくなるように A の無作為標本を抽出し、名前を付けて保存し
equalA
ます。
- とのそれぞれを の9 つのセルに
moreA
分割します。各セルは の合計を表し、範囲 (24, 60)を持ち、(41, 51) でカットされます。それぞれ、、として保存します。各セルは、またはの平均も「認識」しています。equalA
B
race x age_group
Z
age group
moreAtable
equalAtable
Btable
Crime
Participation
- の各セルをランク付けし
moreAtable
、それが表す合計に従ってランク付けします。equalAtable
Btable
Z
- ランクに基づいて と をそれぞれ照合し、それぞれ と
moreAtable
にequalAtable
保存します。Btable
moreAB
equalAB
このすべてについてnrow(A) >> nrow(B)
、少なくとも の各行A
に対しての 10 行を取得するのに十分であると仮定しB
ます。
データセットを生成する
年齢 (24,61) と人種 (黒人、ヒスパニック、白人) は、それぞれのスペースから均一にサンプリングされます。パーセンテージは、おもちゃのベータ分布からサンプリングされ、[0, 100] の数値として表されます。その後、年齢は要求された範囲に分割されます。
# Reproducible sampling
set.seed(2013^2 * 3)
# Dataset B:
nrB <- 1000 # number of rows in B
B <- data.frame(X = sample(x = 24:60, size = nrB, replace = TRUE), Y = sample(x = c("Black",
"Hispanic", "White"), size = nrB, replace = TRUE), Z = sample(x = (1:300) *
1000, size = nrB, replace = TRUE), Crime = round(rbeta(n = nrB, shape1 = 0.5,
shape2 = 0.5) * 100, 2))
# Dataset B
nrA <- nrB * 20 # times of rows B = rows in A
A <- data.frame(X = sample(x = 24:60, size = nrA, replace = TRUE), Y = sample(x = c("Black",
"Hispanic", "White"), size = nrA, replace = TRUE), Z = sample(x = (1:300) *
1000, size = nrA, replace = TRUE), Participation = round(rbeta(n = nrB,
shape1 = 0.8, shape2 = 2) * 100, 2))
# Now lets cut the ages
B$AgeGroup <- cut(B$X, breaks = c(24, 41, 51, 60), labels = c("24-40", "41-50",
"51-60"), right = FALSE, include.lowest = TRUE)
A$AgeGroup <- cut(A$X, breaks = c(24, 41, 51, 60), labels = c("24-40", "41-50",
"51-60"), right = FALSE, include.lowest = TRUE)
# Show data
head(A)
## X Y Z Participation AgeGroup
## 1 53 Black 167000 20.39 51-60
## 2 36 White 130000 3.10 24-40
## 3 57 White 101000 32.41 51-60
## 4 60 Black 28000 72.29 51-60
## 5 58 Black 172000 22.10 51-60
## 6 59 Hispanic 51000 69.01 51-60
head(B)
## X Y Z Crime AgeGroup
## 1 58 White 118000 8.10 51-60
## 2 33 Black 97000 36.58 24-40
## 3 44 Hispanic 212000 3.62 41-50
## 4 29 Hispanic 108000 35.13 24-40
## 5 53 Black 175000 96.47 51-60
## 6 58 Black 291000 4.41 51-60
両方の A サンプル データセットを生成する
サンプル A データセットを取得しましょう。より長いものについては、B の各 on に対して 10 をサンプリングします。等しい長さの on については、A:B をサンプリングします。
# Longer A
moreA <- A[sample(x = 1:nrow(A), size = 10 * nrow(B)), ]
# Equal A
equalA <- A[sample(x = 1:nrow(A), size = nrow(B)), ]
データセットを 3x3 行列に分割します
実際には、データフレームを操作する方がはるかに簡単なので、3x3 マトリックスに分割しません。これには package を使用するplyr
ので、それがインストールされている (またはインストールできる) ことを確認してください。
# Try to load plyr. If not installed, try to install and then load it
if (!require("plyr")) {
install.packages("plyr")
library("plyr")
}
## Loading required package: plyr
# For each YxAgeGroup, sum Z and average the unique variable
Btable <- ddply(.data = B, .variables = c("Y", "AgeGroup"), .fun = function(x) {
c(totalZ = sum(x$Z, na.rm = TRUE), meanCrime = mean(x$Crime, na.rm = TRUE))
})
moreAtable <- ddply(.data = moreA, .variables = c("Y", "AgeGroup"), .fun = function(x) {
c(totalZ = sum(x$Z, na.rm = TRUE), meanParticipation = mean(x$Participation,
na.rm = TRUE))
})
equalAtable <- ddply(.data = equalA, .variables = c("Y", "AgeGroup"), .fun = function(x) {
c(totalZ = sum(x$Z, na.rm = TRUE), meanParticipation = mean(x$Participation,
na.rm = TRUE))
})
テーブルをランク付けする
合計Zに従って各テーブルをランク付けします
Btable$rank <- rank(x = Btable$totalZ)
moreAtable$rank <- rank(x = moreAtable$totalZ)
equalAtable$rank <- rank(x = equalAtable$totalZ)
A テーブルのそれぞれを B とマージする
最後に、各 A テーブルを B とマージします
moreAB <- merge(Btable, moreAtable, by = "rank", suffixes = c("_B", "_A"))
equalAB <- merge(Btable, equalAtable, by = "rank", suffixes = c("_B", "_A"))
moreAB
## rank Y_B AgeGroup_B totalZ_B meanCrime Y_A AgeGroup_A
## 1 1 White 51-60 12342000 53.41 Black 51-60
## 2 2 Black 41-50 13197000 51.11 White 51-60
## 3 3 Hispanic 41-50 13198000 50.44 Hispanic 41-50
## 4 4 Hispanic 51-60 13440000 50.70 Hispanic 51-60
## 5 5 White 41-50 14290000 51.70 White 41-50
## 6 6 Black 51-60 14526000 43.11 Black 41-50
## 7 7 White 24-40 21290000 50.46 Hispanic 24-40
## 8 8 Black 24-40 21607000 47.48 Black 24-40
## 9 9 Hispanic 24-40 23743000 50.17 White 24-40
## totalZ_A meanParticipation
## 1 132935000 27.46
## 2 133766000 28.07
## 3 134911000 27.40
## 4 136962000 26.97
## 5 137234000 27.14
## 6 137315000 27.03
## 7 227174000 28.38
## 8 237046000 27.95
## 9 243853000 28.00
equalAB
## rank Y_B AgeGroup_B totalZ_B meanCrime Y_A AgeGroup_A totalZ_A
## 1 1 White 51-60 12342000 53.41 Hispanic 41-50 10528000
## 2 2 Black 41-50 13197000 51.11 White 41-50 12770000
## 3 3 Hispanic 41-50 13198000 50.44 Black 51-60 13144000
## 4 4 Hispanic 51-60 13440000 50.70 White 51-60 14139000
## 5 5 White 41-50 14290000 51.70 Black 41-50 15029000
## 6 6 Black 51-60 14526000 43.11 Hispanic 51-60 16524000
## 7 7 White 24-40 21290000 50.46 Hispanic 24-40 19075000
## 8 8 Black 24-40 21607000 47.48 Black 24-40 21793000
## 9 9 Hispanic 24-40 23743000 50.17 White 24-40 25538000
## meanParticipation
## 1 24.34
## 2 29.66
## 3 30.40
## 4 28.30
## 5 29.65
## 6 24.30
## 7 29.17
## 8 30.62
## 9 30.82
それは動作しますか?