2014-06-12 111 views
2

我正在處理大約10個具有相同列名但行數不同的數據幀。我想創建一個具有相同名稱的所有列的列表。從多個數據幀中提取具有相同名稱的列[R]

所以說,我有2個相同名稱的數據幀。

a<-seq(0,20,1) 
b<-seq(20,40,1) 
c<-seq(10,30,1) 

df.abc.1<-data.frame(a,b,c) 

a<-seq(20,50,1) 
b<-seq(10,40,1) 
c<-seq(30,60,1) 

df.abc.2<-data.frame(a,b,c) 

我知道我可以從這些數據創建一個列表,例如,

list(df.abc.1$a, df.abc.2$a) 

,但我不想打字了我漫長的數據幀名和列名。

我希望做這樣的事情,

list(c(df.abc.1, df.abc.2)$a) 

但是,它返回df.abc.1名單美元

也許有可能是在整個使用grep功能的方法多個data.frames? 也許一個循環可以完成這個任務?

回答

3

不知道,如果是更好,但也許

lapply(list(df.abc.1, df.abc.2), function(x) x$a) 

超過一列

lapply(list(df.abc.1, df.abc.2), function(x) x[, c("a","b")]) 
+0

太好了!這可能是一個長鏡頭,但是,我知道在ls()中我可以指定一個模式(pattern =「df」)來列出我的data.frames的名稱。但是,我無法弄清楚如何使用它來指定列表函數中的對象。 – MadmanLee

+0

嘗試'ls.str(pattern =「df」)' –

+0

幾乎,我想我只是懶惰,並希望R做到這一切。當我做'a <-ls(pattern =「df」)''它給了我''df.abc.1「」df.abc.2「'但我真正想要的是'df.abc.1,df。 abc.2'然後我想輸入一個你提供的列表函數。感謝您的寶貴意見。 – MadmanLee

相關問題