R:独立地随机抽样(替换)数据帧的每一列

时间:2017-03-23 17:04:11

标签: r random

我正在尝试通过随机抽样现有数据框来创建新数据框。具体来说,我想创建一个与原始数据帧大小相同的数据帧,但新数据帧的每一列都是原始数据帧中相应列的随机样本(替换)。我的第一次尝试看起来像这样:

# Create toy data set
data.set <- as.data.frame(matrix(1:50, ncol = 5)) 

# Change names
colnames(data.set) <- c("Stuff", "Things", "Foo", "Bar", "Guff")

# Try to create randomly sampled data frame
data.set %>% sample_n(replace = TRUE, size = nrow(data.set))

这里的问题是它只是随机地对进行采样,而不是逐个采样每个列中的元素。例如,这是一些输出。

    Stuff Things Foo Bar Guff
2       2     12  22  32   42
10     10     20  30  40   50
2.1     2     12  22  32   42
3       3     13  23  33   43
5       5     15  25  35   45
3.1     3     13  23  33   43
8       8     18  28  38   48
9       9     19  29  39   49
1       1     11  21  31   41
6       6     16  26  36   46 

请注意,第一行和第三行完全相同,第四行和第六行也是如此。我想要的是每个列随机采样独立。所以,我试过了。

apply(data.set, MARGIN = 2, sample_n, replace = TRUE, size = nrow(data.set))

产生了以下错误:

Error: Don't know how to sample from objects of class integer
但是,我看不出我做错了什么。任何人都可以提供一种简洁的方法来实现我的目标吗?

1 个答案:

答案 0 :(得分:3)

首先,apply函数应该有参数。在这种情况下,我们使用列,因为边距是2。

apply(df, MARGIN = 2, function(x) sample(x, replace = TRUE, size = length(x)))