2015-07-28 117 views
2

这是this question的后续。我想从其他行中独立抽取data.frame的每一行中的随机样本。 data.frame可能包含给定的data.framedf中给出的NA。从包含NAs的data.frame的每一列随机采样

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 

从第一行我要选择四条意见(非空列)与更换,并从第二排我想选择五大变化(非空列)与第一选择更换独立。但是我给出的代码从第一行中选择了五个观察值,第二行代替了五个观测值。任何在这方面的帮助将不胜感激。谢谢

+0

是的,你绝对正确@akrun。 – MYaseen208

+0

也许'lst < - apply(df,1,function(x)sample(x [!is.na(x)],replace = TRUE)); do.call(rbind,lapply(lst,'length <-' ,max(长度(lst))))' – akrun

+0

感谢@akrun对您的有用评论。你介意改变你的评论回答。 – MYaseen208

回答

1

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

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

如果我们需要重新转换的listmatrix,我们可以追加“NA”末,使长度相同的每个list元素,我们使用rbind将其转换回matrix

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

谢谢@akrun。这是我需要的。再次感谢。 – MYaseen208

相关问题