我想縮短一段代碼,使其更快,更容易修改。這是我的數據的一個簡短例子。聚合所有可能的獨特組合與觀察在同一列中R
order obs year var1 var2 var3
1 3 1 1 32 588 NA
2 4 1 2 33 689 2385
3 5 1 3 NA 678 2369
4 33 3 1 10 214 1274
5 34 3 2 10 237 1345
6 35 3 3 10 242 1393
7 78 6 1 5 62 NA
8 79 6 2 5 75 296
9 80 6 3 5 76 500
10 93 7 1 NA NA NA
11 94 7 2 4 86 247
12 95 7 3 3 54 207
基本上,我想爲R找到兩個值(觀察)的任何可能的和獨特的組合柱「OBS」,在同一年度內,以創建觀察是聚集了新的矩陣或DF的原件。順序並不重要,所以1 + 6 = 6 + 1。例如,有150個觀測值,我預計有11,175個可行組合(每年)。
我有些想要的基本代碼,但是,正如你所看到的,這樣做太長了(我已經建立了66種不同的新數據集,所以它沒有真正意義),我想知道如何縮短它。我做了一些試驗(plyr,...),但沒有取得真正的成功。在這裏我所做的:
# For the 1st year, groups of 2 obs
newmatrix <- data.frame(t(combn(unique(data$obs[data$year==1]), 2)))
colnames(newmatrix) <- c("obs1", "obs2")
newmatrix$name <- do.call(paste, c(newmatrix[c("obs1", "obs2")], sep = "_"))
# and the aggregation of var. using indexes, which I will skip here to save your time :)
要ilustrate,這裏的結果,考慮的是什麼,我會得到第1年以上的樣本。 NA是因爲我只計算2個值有效的那些。而且,只有變量1和3的更多,我做的總和,但它可以是任何其他可能的功能:
order obs1 obs2 year var1 var3
1 1 1 3 1_3 42 NA
2 2 1 6 1_6 37 NA
3 3 1 7 1_7 NA NA
4 4 3 6 3_6 15 NA
5 5 3 7 3_7 NA NA
6 6 6 7 6_7 NA NA
至於第三年的2條第一線,同類型的矩陣:
order obs1 obs2 year var1 var3
1 1 1 3 1_3 NA 3762
2 2 1 6 1_6 NA 2868
.......... etc ............
我希望我解釋一下自己。預先感謝您提示如何更有效地做到這一點。