从数据帧中选择随机数

时间:2014-05-14 18:35:03

标签: r random statistics dataframe

我创建了一个"错误"的数据帧。按照Bernaard& amp; Sijtsma(2000)用于丢失数据插补的双向方法。为了完成对丢失数据的计算,我需要从此错误数据框中随机选择一个单个数字,并将其添加到我已计算的缺失数据值中。

我熟悉sample()函数,但我不是在寻找行或列的随机样本,而是从数据框中寻找一个单独的单元格。有没有一种简单的方法可以做到这一点,例如单个"选择随机数()"命令?还有一种我尚未探索的替代方法吗?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

如果您可以转换为matrix而非dataframe,但假设您需要保留不同的数据类型或某些此类限制,则会更容易,

foo<-as.data.frame(matrix(runif(20),nrow=4,ncol=5))
foo[sample(1:nrow(foo)),sample(1:ncol(foo))]

会选择一个随机元素。

答案 1 :(得分:1)

与@CarlWitthoft回答的类似,您可以将数据帧转换回矩阵,以确保您对随机单元格进行采样

> set.seed(10)
> M <- data.frame(matrix(runif(20), nrow = 4, ncol = 5))
> M
#          X1         X2        X3        X4         X5
# 1 0.5074782 0.08513597 0.6158293 0.1135090 0.05190332
# 2 0.3067685 0.22543662 0.4296715 0.5959253 0.26417767
# 3 0.4269077 0.27453052 0.6516557 0.3580500 0.39879073
# 4 0.6931021 0.27230507 0.5677378 0.4288094 0.83613414

> sample(as.matrix(M), 1)  
# [1] 0.2641777            ## came from row 2, column 5
> sample(as.matrix(M), 1)  
# [1] 0.113509             ## came from row 1, column 4
> sample(as.matrix(M), 1)  
# [1] 0.4288094            ## came from row 4, column 4
> sample(as.matrix(M), 1)  
# [1] 0.2723051            ## came from row 4, column 2

seq(as.matrix(M))会显示所有单元格编号(从上到下,从左到右)。你也可以从中抽样。

> seq(as.matrix(M))
# [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
> sample(seq(as.matrix(M)), 1)
# [1] 15