2013-02-28 113 views
2

我在嘗試將表格從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

回答

5

我認爲,作爲在評論中提到的,要走的路是先合併在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") 
4

儘管什麼微軟想你相信.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