簡體   English   中英

R read.table <->寫表

[英]R read.table <-> write.table

在R中:

d=read.table(filename, as.is = TRUE, header = TRUE, sep = "\t", row.names = 1)

從d寫回完全相同的文件的命令是什么?

write.table(d, ?)

我給您一個示例輸入文件:

one two
1   2

分隔符為“ \\ t”。 用read.table讀取完全相同的輸出文件后,write.table參數是什么?

謝謝格雷戈爾

問題是您的read.table將列1用作row.names因此丟失了列名(“ one”)。 寫出來時,必須做一些特殊的事情才能重新獲得“一個”名稱。

cbind(one=row.names(d), d)將row.names添加為名稱為“ one”的列。 然后,您只需要禁用row.names和引號,並指定分隔符即可:

# Create the test file
filename <- "test.txt"
filename2 <- "test2.txt"
cat("one\ttwo\n1\t2\n", file=filename)

# read it in
d <- read.table(filename, as.is = TRUE, header = TRUE, sep = "\t", row.names = 1)

# write it out again
write.table(cbind(one=row.names(d), d), filename2, row.names=FALSE, sep="\t", quote=FALSE)

# Ensure they are the same:
identical(readLines(filename), readLines(filename2)) # TRUE

readLines(filename)
readLines(filename2)

UPDATE為避免對第一列名稱進行硬編碼,加載時一定不要丟失它:

# Read the data without any row.names
d <- read.table(filename, as.is = TRUE, header = TRUE, sep = "\t", row.names = NULL)
# Then use the first column as row.names (but keeping the first column!)
row.names(d) <- d[[1]]
d
#  one two
#1   1   2        

# Now you can simply write it out...
write.table(d, filename2, row.names=FALSE, sep="\t", quote=FALSE)

# Ensure they are the same:
identical(readLines(filename), readLines(filename2)) # TRUE

當然,如果您保留第1列的名稱並像第一個示例一樣使用它,則仍然可以刪除它。

write.table(d,"filename")

您必須指定要使用的文件擴展名。 希望它能工作。

暫無
暫無

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

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