2017-02-13 45 views
0

我在全局环境中加载了一些数据帧(4,全部.csv),我最终想要将它们全部堆叠在一个新的数据框中。就我而言,我只有rbind数据帧具有相同的标题,这就是为什么我试图将其标题更改为相同的名称。在全局环境中更改多个数据帧的标头

我曾尝试以下:

# group all files with the extension .csv 
filenames <- Sys.glob("*.csv") 

# then I tried to rename them with a `for loop` 
for(i in filenames) { 
    names(filenames[i]) <- "epitope" 
} 

它没有工作,虽然。我认为麻烦的是,R不是将filename(即我拥有的四个数据帧)中的元素视为独立的data.frames本身(其头部应该改变),而是简单地将其视为字符串。当我键入:

filenames[1] 

我得到

[1] "abc_65prots_all_15mers.csv" 

当我期待R键输出中我的数据帧(名为abc_65prots_all_15mers.csv)。

+1

使用'得到(文件名[1])'指实际的对象 – GGamba

+1

'的(我在文件名){ 名(获得(文件名[I]))< - “表位” }' 然后我在获取了 '错误('* TMP *'):对象 'NA' 不found' – BCArg

+0

'i'不是数字,如你可能会期待,但实际的文件名。你可以尝试'for(我在1:长度(文件名))'。 –

回答

0

使用getassign解决了这个问题

# group all files with the extension .csv 
filenames <- Sys.glob("*.csv") 

# Then the loop 
     for(i in filenames) { 
     tables <- get(i) 
     names(tables) <- "epitope" 
     assign(i, tables) 
    } 
0

在这个未经测试的伪代码中,你可以做这样的事情。 lapply将照顾你的官僚作风。

mf <- Sys.glob(".csv") 

xy <- lapply(mf, read.table, header = TRUE) # read files into a list 

# rename each dataset 
xy <- lapply(xy, FUN = function(x) { 
    names(x) <- c("vector of names") 
}) 

do.call(rbind, xy) # merge all datasets 
+0

'文件名< - Sys.glob(“*。csv”)' 'xy < - lapply(X = filenames,read.table,header = T)' '的xy < - lapply(XY,FUN =函数(X){ 名称(X)< - C( “肽”) })' '最终< - do.call(rbind,XY)' 'final' '[1] [1,] “肽” [2,1] “肽” [3,] “肽” [4,] “肽”' 不幸的是不完全是我想... – BCArg