我创建了一个"错误"的数据帧。按照Bernaard& amp; Sijtsma(2000)用于丢失数据插补的双向方法。为了完成对丢失数据的计算,我需要从此错误数据框中随机选择一个单个数字,并将其添加到我已计算的缺失数据值中。
我熟悉sample()函数,但我不是在寻找行或列的随机样本,而是从数据框中寻找一个单独的单元格。有没有一种简单的方法可以做到这一点,例如单个"选择随机数()"命令?还有一种我尚未探索的替代方法吗?
非常感谢任何帮助。
答案 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