随机抽样R中不重复的行百分比

随机抽样R中不重复的行百分比,r,sample,R,Sample,我有关于年龄和性别特征的人口数据,我正试图根据其他数据用就业类型填充另一列。我已经使用“样本”来选择兼职人群的样本,然后我会将此数据添加为一个新列,但我还没有弄清楚如何确保在下一个样本中不会为不同的就业类型重新选择这些被选中的人 目前,某一年龄组中23%的男性有以下情况: PT=my.df[sample(which(my.df$Age=="15" & my.df$Gender=="Male"), round(0.23*length (which(my.df$Age=="15" &

我有关于年龄和性别特征的人口数据,我正试图根据其他数据用就业类型填充另一列。我已经使用“样本”来选择兼职人群的样本,然后我会将此数据添加为一个新列,但我还没有弄清楚如何确保在下一个样本中不会为不同的就业类型重新选择这些被选中的人

目前,某一年龄组中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。

dplyr包提供了在不替换的情况下按百分比随机采样的可能性

library('dplyr')
sample_frac(df, size = percentage, replace = FALSE)

然后,您可以相应地调整对年龄和性别的限制。

您可以定义一个data.frame来描述给定组的就业统计数据和样本。下面是一个在BaseR中的方法

# 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 

为什么你不能只抽取23+x%的样本而不进行替换,然后根据你的需要分别使用前23%和最后x%的样本?你有多少种工作类型,你希望他们有哪些份额?如果你知道你想要失业、兼职、全职类型的计数为100、200、300,那么创建你的赋值向量,并将其混在你的新列中:samplecrepunemployed,100,repparttime,200,repfulltime,300显然,你必须计算你的100、200,300首先,如果你只知道百分比,而没有考虑到计数……我有10种就业类型,其份额因年龄组和性别而异。我正在使用人口普查数据,我的任务需要尽可能准确。例如,一个年龄组的剩余就业类型分别为23.2%、5.5%、0.5%、11.6%、58.6%、0.5%和0%。然后,不同的年龄组将有不同的百分比或计数,任何更容易的。我正在尝试按年龄、性别以及最终的种族划分就业类型。太棒了,谢谢。我可以在这一行代码中调整约束,还是需要单独进行调整?我已经添加到代码中,但不断出现错误,我不确定这是因为这不可能,还是因为我的R技能不符合要求!样本压裂仅允许您选择百分比,无需更换。您要从中采样的数据集必须在之前已经定义,也就是说,您首先根据性别和/或年龄将df调整为您想要的数据集,然后进行采样。原则上,您也可以在一行中使用sample_fracdf[age==…,gender==],size=。。。但我不鼓励这样做,因为这会让这句话有点难以理解。再次感谢@Gennaro。所有这些似乎都在工作,但不幸的是,当我进行下一个示例时,它会拾取上一个示例中的行。我想知道我是否也需要使用“独特”或“独特”的东西。或者,如果更容易从“data.frame”中删除每个样本,则再次采样。当您从初始集采样时,您可能希望将此样本分配给一个新变量,以便您可以从该变量中采样,而不是从初始变量中再次采样。我需要保持采样的是初始集,而不是在样本中。例如,我需要23%分配给兼职,6%分配给全职,12%分配给失业等等。这太好了,谢谢。我收到了一些错误或警告,但我是R新手,所以我认为这只是因为我需要做一些调整以适应数据。我会继续玩它,但这对我来说是一个很好的起点。再次感谢你。