R中不同列的样本

R中不同列的样本,r,dataframe,sample,R,Dataframe,Sample,假设我有一个概率向量 prob=c(0.1,0.8,0.1) 数据帧:df=cbind(c(“a”、“B”、“a”)、c(1,2,3)、c(“q”、“v”、“z”) 我想用替换从df中采样n对象,第一列的概率为0.1,第二列的概率为0.8,第三列的概率为0.1,我们将取消data.frame的列表,并动态修改prob向量,使其具有适当的长度 df <- data.frame(c("A","B","A"), c(1,2,3), c("q","v","z"), stringsAsFactor

假设我有一个概率向量

prob=c(0.1,0.8,0.1)
数据帧:
df=cbind(c(“a”、“B”、“a”)、c(1,2,3)、c(“q”、“v”、“z”)


我想用替换从df中采样
n
对象,第一列的概率为0.1,第二列的概率为0.8,第三列的概率为0.1,我们将取消data.frame的列表,并动态修改
prob
向量,使其具有适当的长度

df <- data.frame(c("A","B","A"), c(1,2,3), c("q","v","z"), stringsAsFactors = F)

n <- 5
set.seed(1)
unname(sample(unlist(df), n, replace = TRUE, prob= rep(prob, each = nrow(df))))
# [1] "3" "1" "A" "z" "2"

从列表中(回答评论)


这是基于假设一列中的样本概率是一致的:

我们首先使用向量
prob
中的概率对
n
列位置进行采样

df=cbind(c("A","B","A"),c(1,2,3),c("q","v","z"))
prob=c(0.1,0.8,0.1)
n = 10

set.seed(1)
colselect <- sample(1:ncol(df), size = n, replace = TRUE, prob = prob)

[1] 2 2 2 1 2 3 1 2 2 2

您是从列中采样n列还是n个元素?一个样本包括整个列还是一个样本只包括一个元素,如“A”?我想抽样n个元素,10%来自第一列,80%来自第二列,10%来自最后一列PSST。。。我想你想用
data.frame()
替换
cbind()
-你现在得到的是一个
矩阵
。如果它不是一个dataframe,则是一个列表,每个列的长度不同?sample.int中的错误(长度(x),大小,替换,prob):不正确的概率数我没有说每列中的概率是一致的,我问这个问题是因为我想用特定的概率从每列中取样是的,但从一个特定列中取样的哪个值的概率是一致的,还是不一致?你用一个特定的概率对一个特定的列进行采样,但是你不在乎从这个列中采样哪个值,这就是我得到的精确解。使用概率来决定要从每列中采样多少元素,然后从每列中采样。在列中进行替换时,通过在没有约束的情况下一次获取一个项来解决此问题@GLDZZZ-除非你添加更多细节-也许给我们一个例子-那么完全不清楚为什么这不能解决你的问题。
l =list(c("A","B"),c(1,2,3),c("q","v","z","w"))
set.seed(1)
sample(unlist(l), n, replace = TRUE, prob= rep(prob/lengths(l), lengths(l)))
# [1] "3" "2" "1" "v" "3" "B" "q"
df=cbind(c("A","B","A"),c(1,2,3),c("q","v","z"))
prob=c(0.1,0.8,0.1)
n = 10

set.seed(1)
colselect <- sample(1:ncol(df), size = n, replace = TRUE, prob = prob)

[1] 2 2 2 1 2 3 1 2 2 2
sapply(colselect, function(x) sample(df[,x], 1))

[1] "1" "1" "3" "B" "3" "v" "A" "3" "2" "3"