0
我有一個數據幀,df
和函數process
,返回兩個數據幀的列表,a
和b
。我使用dlply將id列上的df
分開,然後返回數據框列表的列表。下面是樣本數據/代碼近似於實際的數據和方法:rbinding基於嵌套順序的數據幀列表
df <- data.frame(id1=rep(c(1,2,3,4), each=2))
process <- function(df) {
a <- data.frame(d1=rnorm(1), d2=rnorm(1))
b <- data.frame(id1=df$id1, a=rnorm(nrow(df)), b=runif(nrow(df)))
list(a=a, b=b)
}
require(plyr)
output <- dlply(df, .(id1), process)
output
是dataframes的名單列表,嵌套列表總會有兩個dataframes,命名爲a
和b
。在這種情況下,外部列表的長度爲4
什麼我期待產生與所有a
dataframes一個數據幀,與id
列指示各自的值(我相信這是在列表中左邊沿split_labels
屬性,請參閱str(輸出))。然後類似地對於b
數據幀。
到目前爲止,我已經在部分使用這個question想出這樣的代碼:
list <- unlist(output, recursive = FALSE)
list.a <- lapply(1:4, function(x) {
list[[(2*x)-1]]
})
all.a <- rbind.fill(list.a)
這給了我最後的a
數據框(且同樣b
用不同的標爲list
),但是它不沒有我需要的id列,我非常肯定,必須有一個更直接或優雅的解決方案。理想情況下使用plyr
清理乾淨。
我不明白這是什麼意思'all.a'「沒有我需要的id列」。如果你需要的id列與'output [[i]] $ b'中的id列是相同的'id1',那麼你不能將它添加到你的'process'函數嗎? – 2012-08-13 16:23:42