除「嵌套」部分外,我的問題標題幾乎與dlply
(plyr
包)描述相匹配。拆分數據框,應用函數並將結果返回到嵌套列表中
讓我用一個例子解釋:
library(plyr)
res <- dlply(mtcars, c("gear", "carb"), identity)
head(res, 2)
# $`3.1`
# mpg cyl disp hp drat wt qsec vs am gear carb
# Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
# Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
# Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
#
# $`3.2`
# mpg cyl disp hp drat wt qsec vs am gear carb
# Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
# Dodge Challenger 15.5 8 318 150 2.76 3.520 16.87 0 0 3 2
# AMC Javelin 15.2 8 304 150 3.15 3.435 17.30 0 0 3 2
# Pontiac Firebird 19.2 8 400 175 3.08 3.845 17.05 0 0 3 2
正如你可以看到,輸出是一個列表,其中的名稱(鍵)是我用來拆分數據的兩個變量的串聯,例如"3.1"
是(gear = 3, carb = 1)
的關鍵。
相反,我想我的結果是一個嵌套列表,因此可以通過兩組鍵來訪問這些元素,其中一個用於我的每個拆分變量:res[["3"][["1"]]
。
有沒有什麼東西,不一定來自plyr
包,那可以做到這一點?我想這個答案可以推廣到任意數量的分裂變量。另外,儘管我的示例使用了函數,但我可以應用任何函數,這一點很重要,從而導致僅僅分割數據。謝謝你的建議。
我不確定你是否看到[這篇文章](http://stackoverflow.com/q/7247108/1270695),但Brian Diggs提供了'plyr'解決方案:'dlply(mtcars,。(gear), (碳水化合物))等等,以獲得更多的嵌套。正如在這個問題上所討論的那樣,這樣的嵌套數據結構可能不是最方便的工作。 – A5C1D2H2I1M1N2O1R2T1 2012-07-18 16:55:27
謝謝@mrdwab。我認爲推廣Brian Diggs所建議的嵌套'dlply'調用的唯一方法就是像上面那樣使用遞歸。您提供的鏈接確實幫助我縮短了代碼(編輯過)。 – flodel 2012-07-19 01:31:35