建议的答案
由于没有提供数据(但被暗示),我将生成数据帧A
并B
基于这些提示(即X->Age(Int); Y->Race(Factor); Z->?(Int),也许是人口?) . 另外,我假设您已经在 R 会话工作区中加载了数据框 A 和 B。然后我假设这些项目不是连续的,但你实际上想要对( c , d )生成的样本执行 ( a , b , e ); 那是:
- 第 1 步为 B 的每个观测值包括 10 个 A 观测值,另存为 dataframe
moreA
。
- Setp 2抽取 A 的随机样本,使 A 的观察次数等于 B,另存为
equalA
.
moreA
将,equalA
和中的每一个划分为 的B
9 个单元格race x age_group
,每个单元格代表范围 (24, 60) 和切入 (41, 51) 的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)和种族(黑人,西班牙裔,白人)从它们的空间中统一采样。百分比是从玩具 beta 分布中抽取的,并表示为 [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
那样有用吗?