R:如何为数据帧的每一行采样不同的列?

R:如何为数据帧的每一行采样不同的列?,r,sample,R,Sample,我想使用不同的权重为数据帧的每一行采样一个不同的列。我尝试了一些事情,但没有成功,包括查找类似的问题。我在下面演示一个模拟DF和预期输出 library(plyr) set.seed(12345) df1 <- mdply(data.frame(mean=c(10, 15, 12, 24)), rnorm, n = 5, sd = 1) df1 库(plyr) 种子集(12345) df1在中,您可以使用prob来加权样本概率。为您可以使用的每一行创建此项 output\u df1只需使

我想使用不同的权重为数据帧的每一行采样一个不同的列。我尝试了一些事情,但没有成功,包括查找类似的问题。我在下面演示一个模拟DF和预期输出

library(plyr)
set.seed(12345)
df1 <- mdply(data.frame(mean=c(10, 15, 12, 24)), rnorm, n = 5, sd = 1)
df1
库(plyr)
种子集(12345)
df1在中,您可以使用prob来加权样本概率。为您可以使用的每一行创建此项


output\u df1只需使用
sample(名称(df1)[2:6],nrow(df1),replace=TRUE)
如果需要不同,请使用
replace=FALSE
。请你澄清一下权重向量在哪里声明,以及我如何声明样本数。你说你希望每行有一个值,但接下来你要讨论样本数。你能澄清一下吗?例如,您想要第四行4个样本?是否需要为每个示例复制该行?关于权重,您的意思是,对于第一行,
V2
V4
更有可能被提取?每行一个值表示每行一列。是的,第四行应该有四个样品。我可以按照你的建议重复这一行。权重是指每行从列到V1到V5的值。我对我的问题进行了编辑,以解决困惑并使之更清楚。谢谢。@MD_1977-不应该“每行从V1到V5抽取一列样本。”那么从问题中删除吗?谢谢。这很有效。我将测试它的运行时间,但这是伟大的。希望它的性能也足够。对于10000行,我的电脑需要约0.1秒的时间。
f_col <- c(10,15,12,24)
sampled_column <- c("V3", "V1", "V5", "V5")

output_df1 <- data.frame("mean" = f_col, "result" = sampled_column)
output_df1
output_df1 <- data.frame("mean"=df1$mean, "result"=apply(df1[,-1], 1, function(x) {sample(names(x), 1, prob=x)}))