来自包含NA的data.frame的每列的随机样本

时间:2015-07-28 12:40:04

标签: r random statistics sample

这是this question的后续行动。我想独立于其他行从data.frame的每一行中随机抽取样本。 data.frame可能包含给定data.frame df中提供的NA。

set.seed(12345)
df1 <- c(rnorm(n=4, mean=0, sd=1), NA)
df2 <- rnorm(n=5, mean=10, sd=1)
df <- rbind(df1, df2)

t(apply(df, 1, sample, replace=TRUE))

         [,1]     [,2]       [,3]     [,4]    [,5]
df1 0.5855288       NA -0.1093033 0.709466      NA
df2 9.7238159 9.723816  8.1820440 9.723816 10.6301

从第一行开始,我想选择四个带有替换的观察值(非空列),从第二行开始,我想选择五个观察值(非空列),并且独立于第一个选择进行替换。但是我给出的代码选择了第一行替换的五个观察结果和第二行替换的五个观察结果。

1 个答案:

答案 0 :(得分:1)

我想你只希望sample使用非NA值。在这种情况下,!is.na可用于删除NA值,然后我们sample对剩余值。输出将是list(&#39; lst&#39;),因为sample之后每行的元素数量不同(4和5)。

  lst <- apply(df, 1, function(x) sample(x[!is.na(x)], replace=TRUE))

如果我们需要将list重新转换为matrix,我们可以附加“&#39; NA&#39;最后,为每个list元素设置相同的长度,我们使用rbind将其转换回matrix

  do.call(rbind,lapply(lst, `length<-`, max(lengths(lst))))