取决于其他变量(R)从表中取样

时间:2016-09-02 19:11:29

标签: r

我是刚开始在R工作的医生,感谢您对此问题的任何帮助: 我有2个表(A,B),变量age(连续),sex(二进制)和test_value(二进制)。每张桌子都有不同的年龄和性别分布。

<a-assets>
<a-asset-item id="chair-obj" src="obj/chair1.obj"></a-asset-item>
<a-asset-item id="chair-mtl" src="obj/chair1.mtl"></a-asset-item>
</a-assets>

<a-entity obj-model="obj: #chair-obj; mtl: #chair-mtl" position="0 1 -1" scale="0.000001 0.000001 0.000001"></a-entity>

测试比例的差异现在因年龄和性别而受到混淆。 现在我想将表A中的患者与表B进行匹配,以调整年龄和性别。因为B是较小的队列,我更愿意从A中抽样并与B匹配。匹配包是一个选项吗?任何其他想法

希望我能够解释我的问题。 这可能指出哪些功能提示?

2 个答案:

答案 0 :(得分:0)

您好我有一个可能的答案,我将建立两个拥有您所说特征的100人口

set.seed(10)
AgeA <- rnorm(100, mean = 30, sd = 10)
#population A is 0.8 percent male
SexA <- sample(c("M","F"), 100, replace = TRUE, prob = c(0.5, 0.5))
Test_ValueA <- rbinom(100, 1, 0.5)

set.seed(20)
AgeB <- rnorm(100, mean = 30, sd = 10)
#population B is 0.8 percent male
SexB <- sample(c("M","F"), 100, replace = TRUE, prob = c(0.8, 0.2))
Test_ValueB <- rbinom(100, 1, 0.3)

A <- data.frame(Age = AgeA, Sex = SexA, Test = Test_ValueA)
B <- data.frame(Age = AgeB, Sex = SexB, Test = Test_ValueB)

然后使用dplyr,您可以汇总人口B参数:

library(dplyr)

Bsummary <- group_by(B,Sex)

Bsummary <- summarise(Bsummary, PercenteagePositive = sum(Test == 1)/length(Test == 1), PercenteageSex = n()/100)

Bsummary

如果你看看这个B的结果是76%的男性和24%的女性,如果你从A中抽取20个人,你将需要抽样15个男性和5个女性。首先,你将男性和女性的A群体分开:

Amale <- filter(A, Sex == "M")
Afemale <- filter(A, Sex == "F")

从中你可以抽取15名男性和5名女性:

SampleAMale <- Amale[sample(nrow(Amale), 15), ]

SampleAFemale <-Afemale[sample(nrow(Afemale), 5), ]

然后加入他们,你可以总结他们

sampleA <- rbind(SampleAMale, SampleAFemale)

ASampleSummary <- group_by(sampleA,Sex)

ASampleSummary <- summarise(ASampleSummary, PercenteagePositive = sum(Test == 1)/length(Test == 1), PercenteageSex = n()/100)

答案 1 :(得分:0)

好的Fank我想你会更喜欢这个答案,第一部分是相同的,并且表明年龄已经过时了:

set.seed(10)
AgeA <- round(rnorm(100, mean = 30, sd = 2))
#population A is 0.8 percent male
SexA <- sample(c("M","F"), 100, replace = TRUE, prob = c(0.5, 0.5))
Test_ValueA <- rbinom(100, 1, 0.5)

set.seed(20)
AgeB <- round(rnorm(100, mean = 30, sd = 2))
#population B is 0.8 percent male
SexB <- sample(c("M","F"), 100, replace = TRUE, prob = c(0.8, 0.2))
Test_ValueB <- rbinom(100, 1, 0.3)

A <- data.frame(Age = AgeA, Sex = SexA, Test = Test_ValueA)
B <- data.frame(Age = AgeB, Sex = SexB, Test = Test_ValueB)

现在你只需使用prop.table来获得你的人口比例。假设你想要从AG中抽取1000个人,就AGE和SEX而言,与A的比例相同。

1000*(prop.table(table(A[,1:2])))

然后通过应用过滤器,您可以在组内进行采样:

例如,如果你想只得到B组30岁的男性,你可以去

BMale30 <- filter(B, Sex == "M" & Age == 30)