簡體   English   中英

在write.table中追加數據時使用列名

[英]using column names when appending data in write.table

我正在循環一些數據,並將其附加到csv文件。 我想要的是在文件頂部有一個列名,然后循環不重復文件中間的列名。

如果我執行col.names=T ,它會重復,包括每個新循環的列名。 如果我有col.names=F ,則根本沒有列名。

我如何最有效地完成這項工作? 我覺得這是一種常見的情況,必須有一種方法可以做到這一點,而無需編寫代碼來處理它。

write.table(dd, "data.csv", append=TRUE, col.names=T)

請參閱?file.exists

write.table(dd, "data.csv", append=TRUE, col.names=!file.exists("data.csv"))

因此,只有在未附加到已存在的文件時才會寫入列名。

您可能也可能不會看到行名稱相同的問題,因為write.table在追加時不允許相同的行名稱。 你可以嘗試一下。 在第一次寫入文件,請嘗試write.tablerow.names = FALSE只。 然后,從第二次寫入到文件,使用col.names = FALSErow.names = FALSE

這是第一次寫入文件

> d1 <- data.frame(A = 1:5, B = 1:5)                ## example data
> write.table(d1, "file.txt", row.names = FALSE)

我們可以用read.table("file.txt", header = TRUE)來檢查它。 然后我們可以將相同的數據框附加到該文件

> write.table(d1, "file.txt", row.names = FALSE, 
              col.names = FALSE, append = TRUE)

我們可以再次使用read.table("file.txt", header = TRUE)

所以,如果你有一個數據框列表,比如dlst ,那么將數據框附加到一起的代碼塊可能看起來像

> dlst <- rep(list(d1), 3)                              ## list of example data
> write.table(dlst[1], "file.txt", row.names = FALSE)  
> invisible(lapply(dlst[-1], write.table, "file.txt", row.names = FALSE, 
                   col.names = FALSE, append = TRUE))

但正如@MrFlick建議的那樣,將數據幀附加到R中然后將它們發送到文件一次會好得多。 這將消除寫入文件時可能發生的許多可能的錯誤/問題。 如果數據在列表中,則可以使用

> dc <- do.call(rbind, dlst)
> write.table(dc, "file.txt")

嘗試使用R中的names()命令更改數據框的列名,並使用與現有相同的名稱替換,然后嘗試使用dbWriteTable命令保持row.names = False 這個問題將得到解決。 例如
如果你的數據框df1有列為obsnameage

names(df1) <- c('obs','name','age')

然后試試

dbWriteTable(conn, 'table_name', df1, append = T, row.names = F) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM