如何为我的数据子集获得 1 和 0 的随机分配,以及 R 中其余部分的 0 的随机分配



我有一个按组划分的数据框,每个组都有相同数量的观测值。我随机为每个组分配了一个 1 或 0 的值。对于给定值为 1 的组中的所有观察值,我希望变量ysp填充一定数量的随机 1 和 0。对于分配了 0 的组,我希望用所有 0 填充相同的变量ysp

这是我到目前为止的代码:

rm(list=ls(all=TRUE))
set.seed(1984)
ngroup <- 50 # Number of groups
obs <- 50      # Number of observations per group
pgroup <- 0.5 # (1 - p) probability of groups with at least 1 non zero obs (only works if the answer is a round number)
p <- 0.5 # Once chosen the number of groups I want to have with at least one non zero obs, I want p% of 1s in those groups.
constantdata <- data.frame(id=1:ngroup)
dummies <- c(0,1)
dummies[sample(1:nrow(constantdata), nrow(constantdata), FALSE)] <- rep(dummies, c(pgroup*ngroup,(1-pgroup)*ngroup))
constantdata["probgr"] <- dummies
fulldata <- constantdata[rep(1:ngroup, each=obs),] 
fulldata$ys <- rnorm(ngroup*obs) 
#This is how I try to do it
if(fulldata$probgr=1){
fulldata$ysp[fulldata$ys > quantile(fulldata$ys, 1 - p)] <- 1 
fulldata$ysp[fulldata$ys <= quantile(fulldata$ys, 1 - p)] <- 0
}else{
fulldata$ysp=0}

当然,这是行不通的。 我希望变量ysp有 50% (pgroup%( 随机组所有 0 和另外 50% (1 - pgroup%( 的组,随机分配 p% 1s 和 0s。

你写if(fulldata$probgr=1)的地方可能是指if(fulldata$probgr==1)(平等测试,而不是作业(。此外,如果不是向量操作。 获得所需内容的一种方法是将 ysp 中的所有内容设置为 0,然后随机更改 probgr==1 的那些,如下所示:

fulldata$ysp = 0
fulldata$ysp[fulldata$probgr == 1] = sample(0:1, sum(fulldata$probgr == 1), replace=TRUE)

最新更新