2014-10-20 28 views
2

我有一系列順序命名的數據幀,即「frame_1」「frame_2」frame_3「等。我想使這些幀中的每一個的第一行使用環或類似的東西,到目前爲止,我曾嘗試:訪問順序命名的數據幀的名稱

for(i in 1:length(holder)){ 
    colnames(noquote(paste("frame_",i,sep="")))<- (noquote(paste("frame_",i,sep="")))[1,] 
} 

然而,這是給我的錯誤

Error in unclass(x)[...] : incorrect number of dimensions 

對此我無法理解,因爲它要傳遞colnames功能「FRAME_1」「frame_2」 etc

任何幫助非常感謝!

回答

3

我建議保留所有數據幀在一個列表中而不是多個對象。這裏有一個辦法:

# get the names of the data frames 
frame_names <- ls(pattern = "^frame_\\d+$") 

# put all data frames in a list 
frames <- mget(frame_names) 

# change the column names of all data frames in the list 
frames <- lapply(frames, function(x) setNames(x, x[1, ])) 

之後,您可以訪問數據幀列表frames。例如,frames[[1]]返回第一個數據幀(frame_1)。

+0

Hi Sven,你知道有什麼好的資源來學習這種方法嗎?特別是你的第三行代碼。 – user124123 2014-10-21 08:30:55

+0

@ user1987097您可以查看「lapply」幫助頁面。函數'lapply'允許你將一個函數應用於列表中的所有元素。在這個例子中,列表元素是數據框。在函數中,參數'x'表示數據幀。函數'setNames'將數據框的列名('x')更改爲第一行('x [1,]')中的值。 – 2014-10-21 10:21:20

+0

因此,我可以在之前定義自己的書面函數,例如刪除傳遞給它的參數的第一行(或任何分配任務),然後使用您在答案中的表單將其應用於數據框列表? – user124123 2014-10-21 15:56:22