R 如何避免结果生成器中的循环
我有一个数据框架,其中包含三种结果的概率:a、B和C。它们的概率是prob1、prob2和prob3:R 如何避免结果生成器中的循环,r,dataframe,loops,R,Dataframe,Loops,我有一个数据框架,其中包含三种结果的概率:a、B和C。它们的概率是prob1、prob2和prob3: df = data.frame(prob1=runif(1000,0,0.2),prob2=runif(1000,0,0.1)) df$prob3 = 1-df$prob1-df$prob2 我试图模拟每一行的结果,给出其唯一的概率,并运行以下循环: df$outcome = NA for (i in 1:1000) { df$outcome[i]<-sample(c(A,B,
df = data.frame(prob1=runif(1000,0,0.2),prob2=runif(1000,0,0.1))
df$prob3 = 1-df$prob1-df$prob2
我试图模拟每一行的结果,给出其唯一的概率,并运行以下循环:
df$outcome = NA
for (i in 1:1000) {
df$outcome[i]<-sample(c(A,B,C), 1, prob = c(df$prob1[i],df$prob2[i],df$prob3[i]), replace = FALSE)
}
df$outcome=NA
对于(1:1000中的i){
df$outcome[i]您可以使用apply
:
df$outcome <- apply(df, 1, function(x) sample(c(A, B, C), 1, prob = x))
您可以使用apply
:
df$outcome <- apply(df, 1, function(x) sample(c(A, B, C), 1, prob = x))
这里有一种通过多项式抽样的方法:
m <- t(apply(df,1,rmultinom,n=1,size=1)) ## 1000 x 3 matrix of 0/1 values
w <- apply(m,1,which) ## vector of 1000 values in {1,2,3}
我修改了列名,因为rMultinom
自动使用列名作为示例的值
如果您需要真正快速的向量化多项式采样,并且愿意处理编译代码的麻烦,那么的答案会有所帮助。这里有一种通过多项式采样的方法:
m <- t(apply(df,1,rmultinom,n=1,size=1)) ## 1000 x 3 matrix of 0/1 values
w <- apply(m,1,which) ## vector of 1000 values in {1,2,3}
我修改了列名,因为rMultinom
自动使用列名作为示例的值
如果您需要真正快速的向量化多项式采样,并且愿意处理编译代码的麻烦,那么的答案可能会有所帮助