2015-07-28 118 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

相關問題