2013-04-30 51 views
0

我有一個名稱數組和一個返回數據框的函數。我想結合這個數組和數據框架。例如:R:將列表與數據框相結合

>mynames<-c("a", "b", "c") 
>df1 <- data.frame(val0=c("d", "e"),val1=4:5) 
>df2 <- data.frame(val1=c("e", "f"),val2=5:6) 
>df3 <- data.frame(val2=c("f", "g"),val3=6:7) 

我想要的是一個數據框,將數組連接到數據框。 df1對應於「a」,df2對應於「b」等等。因此,最終的數據幀如下所示:

Names Var Val 
a  d  4 
a  e  5 
b  e  5 
b  f  6 
c  f  6 
c  g  7 

有人可以幫助我嗎?

謝謝。

+0

你說df1對應於「a」,但R應該如何知道這個? – Dason 2013-04-30 05:18:14

+0

@Dason其實我正在迭代data.frame,df(比如說)併爲數據框的每一行調用一個函數。這個函數依次返回每一行的數據幀。因此,mynames是'df'的第一列,'df1,df1,df3'是df的每行(本例中爲3)的結果。由於整個代碼非常大,我在這裏生成了一個示例。 – 2013-04-30 05:22:28

回答

2

這回答這個特定的問題,但我不知道這將是您的實際問題有多大幫助:

myList <- list(df1, df2, df3) 
do.call(rbind, 
     lapply(seq_along(mynames), function(x) 
      cbind(Names = mynames[x], setNames(myList[[x]], 
              c("Var", "Val"))))) 
# Names Var Val 
# 1  a d 4 
# 2  a e 5 
# 3  b e 5 
# 4  b f 6 
# 5  c f 6 
# 6  c g 7 

在這裏,我們創建data.frame s的名單,並在我們的lapply通話,我們添加新的「名稱」列並重命名現有的列,以便我們可以使用rbind將它們放在一起。