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

时间:2019-05-21 04:29:35

标签: r sample

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

library(plyr)
set.seed(12345)
df1 <- mdply(data.frame(mean=c(10, 15, 12, 24)), rnorm, n = 5, sd = 1)
df1

我希望有一个矢量化的解决方案(希望如此)为每行从V1到V5采样一列。采样的权重是所讨论行的从V1到V5的每个单元中的值。实际的数据框可能有几百万行。输出示例如下所示。

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

1 个答案:

答案 0 :(得分:1)

sample中,您可以使用 prob 加权样本概率。要使每一行都使用此功能,可以使用apply

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