2013-06-24 63 views
2

我有一個由2000個人組成的數據集。對於每個人,i:2000,數據集包含n重複的情況。令d表示這個數據集,d的每一行索引爲in。在其他變量中,d具有變量pid,該變量對於不同(情境)行中的個體具有相同的值。重新採樣面板維數據框


考慮到數據的面板性質,我想重新樣品d(如在自舉):

  • 與更換,
  • 存儲每個重新採樣的數據作爲數據幀

我考慮使用sample函數,但無法使其工作。我是r的新用戶,沒有編程技能。

數據集由許多變量組成,但所有變量都有數字值。數據集如下。

pid x y z 
    1 10 2 -5 
    1 12 3 -4.5 
    1 14 4 -4 
    1 16 5 -3.5 
    1 18 6 -3 
    1 20 7 -2.5 
    2 22 8 -2 
    2 24 9 -1.5 
    2 26 10 -1 
    2 28 11 -0.5 
    2 30 12 0 
    2 32 13 0.5 

前六行是第一人,爲此pid=1,和下一行性,pid=2是第二個人不同意見。

+1

使用'head(d)'向我們展示數據集前六行的示例。你也可以使用'str(d)'來檢查d的結構,所以我們知道哪些列是數字,字符串,因素等。最後,使用'dput(d)'(或'dput(d [1:10, ])'),以便我們可以輕鬆地在*您的*數據上嘗試我們的解決方案。 – MrGumble

+0

我希望這是有幫助的。我無法解決您的所有請求。 – Duna

+1

你想存檔什​​麼樣的採樣?從2000年以後選擇n個人並保留所有觀察結果?爲每個人選擇m個觀察值?兩者的結合? – Thilo

回答

0

這應該爲你工作:

z <- replicate(100, 
       d[d$pid %in% sample(unique(d$pid), 2000, replace=TRUE),], 
       simplify = FALSE) 

結果z將dataframes你可以做任何與清單。

編輯:這是一個羅嗦,但將處理重複的行。 replicate有明顯的使用執行設定操作給定的次數(在下面的例子中,4)。我然後samplepid(在這種情況下,這些值中的3個,替換)的唯一值,並提取d行對應於每個採樣值。 do.callrbindlapply的組合處理上述代碼無法處理的重複項。因此,該代碼不是生成具有可能不同長度的數據幀,而是針對每個採樣pid生成數據幀,然後使用do.call("rbind",...)replicate的每次迭代內將它們粘在一起。

z <- replicate(4, do.call("rbind", lapply(sample(unique(d$pid),3,replace=TRUE), 
            function(x) d[d$pid==x,])), 
            simplify=FALSE) 
+0

當我運行您的代碼時,如下所示 'z < - replicate(4,#4 resamples d [d $ pid%in%sample(unique(d $ pid),3,replace = TRUE),],#for每個唯一值在d:1-3 simplification = FALSE)我有4個resamples,但並不是所有的行都是相同的。 – Duna

+0

看我的編輯是否符合你的要求。 – Thomas

+0

這是按我的意思工作,謝謝。我更多的口頭解釋會很棒。 – Duna