我有年龄和性别特征的人口数据,我试图根据其他数据填充另一个具有就业类型的列。我使用了&#39; sample&#39;选择一份兼职工作人口的样本,然后我会将这些数据作为一个新专栏添加,但我还没有弄清楚如何确保在下一个样本中不重新选择那些被选中的不同就业类型。< / p>
目前,我有以下情况,其中23%是某一年龄段的男性:
PT=my.df[sample(which(my.df$Age=="15" & my.df$Gender=="Male"), round(0.23*length (which(my.df$Age=="15" & my.df$Gender=="Male")))),]
我的输出示例如下:
Edinburgh.ID Age Gender
2445 2445 15 Male
2477 2477 15 Male
2469 2469 15 Male
2485 2485 15 Male
2487 2487 15 Male
2483 2483 15 Male
我现在想要从具有不同就业类型的同一年龄和性别组中选择下一个x%。如果我只是将0.23更改为另一个百分比,在某些情况下会出现相同的ID,但我希望每个样本中都有单独的ID。
答案 0 :(得分:2)
dplyr
包提供了随机取样(out)替换随机抽样的可能性。
library('dplyr')
sample_frac(df, size = percentage, replace = FALSE)
然后您可以相应地调整您对年龄和性别的限制。
答案 1 :(得分:0)
您可以定义一个data.frame,描述给定组的就业统计数据和样本。这是基础R中的一种方法。
# Generate some data
N = 1000
my.df <- data.frame(Age = rep("15", N),
Gender = sample(c("Male", "Female"), N, TRUE),
Activity = rep("", N),
stringsAsFactors = FALSE)
head(my.df)
# Age Gender Activity
# 1 15 Female
# 2 15 Male
# 3 15 Male
# 4 15 Female
# 5 15 Male
# 6 15 Female
# employment statistics for the group age = "15" and gender = "Male"
employment <- data.frame(activity = letters[1:5],
prob = c(0.1, 0.1, 0.2, 0.5, 0.1),
stringsAsFactors = FALSE)
employment
# activity prob
# 1 a 0.1
# 2 b 0.1
# 3 c 0.2
# 4 d 0.5
# 5 e 0.1
# Assign activities
set.seed(35)
id <- which(my.df$Age == "15" & my.df$Gender == "Male")
my.df[id, "Activity"] <- sample(employment$activity, length(id),
replace = TRUE, prob = employment$prob)
table(my.df[my.df$Gender=="Male", "Activity"])/length(id)
# a b c d e
# 0.1135903 0.1054767 0.1805274 0.4665314 0.1338742