如何在R中覆盖文件

问题描述:

我在尝试将表格从R复制并粘贴到Excel中。从先前question考虑下面的代码:如何在R中覆盖文件

data <- list.files(path=getwd()) 
    n <- length(list) 
    for (i in 1:n) 
    { 
     data1 <- read.csv(data[i]) 
     outline <- data1[,2] 
     outline <- as.data.frame(table(outline)) 
     print(outline) # this prints all n tables 
     name <- paste0(i,"X.csv") 
     write.csv(outline, name) 
     } 

此代码的每个表写入到单独的Excel文件(即“1X.csv”,“2X.csv”,等等。)。有没有什么办法可以将每个表格“移动”一些行而不是每次重写前一个表格?我也试过这段代码:

output <- as.data.frame(output) 
wb = loadWorkbook("X.xlsx", create=TRUE) 
createSheet(wb, name = "output") 
writeWorksheet(wb,output,sheet="output",startRow=1,startCol=1) 
writeNamedRegion(wb,output,name="output") 
saveWorkbook(wb) 

但是这并没有将数据帧完全复制到Excel中。

+0

如果你在R中创建一个完整的表,然后将该表写入单个文件,它工作吗? – Alex 2013-02-28 14:49:38

+1

写入连接,并用“a”打开文件。 – 2013-02-28 16:02:33

我认为,作为在评论中提到的,要走的路是先合并在R上的数据帧,然后将它们写入(一个)输出文件:

# get vector of filenames 
filenames <- list.files(path=getwd()) 

# for each filename: load file and create outline 
outlines <- lapply(filenames, function(filename) { 
    data <- read.csv(filename) 
    outline <- data[,2] 
    outline <- as.data.frame(table(outline)) 
    outline 
}) 

# merge all outlines into one data frame (by appending them row-wise) 
outlines.merged <- do.call(rbind, outlines) 

# save merged data frame 
write.csv(outlines.merged, "all.csv") 

尽管什么微软想你相信.csv文件不是excel文件,它们是可以被excel和许多其他程序读取的常见文件类型。

最好的方法取决于你真正想做什么。你是否想把所有的表格都读入excel中的单个工作表中?如果是这样,您可以使用,或其他函数的参数append写入单个文件。或者使用您保持打开的连接,以便每个新连接都被追加。您可能希望使用cat在每个新表格之前放置几行换行符。

你的第二次尝试看起来像它使用XLConnect包(但你不说,所以它可能是别的东西)。我会认为这是最好的方法,结果与你期望的结果有什么不同?

+0

单独为第一句话+1。 – 2013-03-01 01:47:00

+0

@Greg Snow:是的,第二次尝试是XLConnect软件包。它不会完全复制表格。 IS转置名称,并将频率作为列标题。 – proton 2013-03-01 02:06:08

+0

对于'append'参数提示,特别是+1。当我这样做时,就是这样做的。 – Aaron 2013-03-01 03:31:13