首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R read.table <-> write.table

R read.table <-> write.table
EN

Stack Overflow用户
提问于 2012-01-28 00:02:54
回答 2查看 7.6K关注 0票数 2

在R中:

代码语言:javascript
复制
d=read.table(filename, as.is = TRUE, header = TRUE, sep = "\t", row.names = 1)

从d写回完全相同的文件的命令是什么?

代码语言:javascript
复制
write.table(d, ?)

我给你一个输入文件的例子:

代码语言:javascript
复制
one two
1   2

分隔符是"\t“。在使用read.table读取输出文件后,会写入完全相同的输出文件的write.table参数是什么?

谢谢你,Gregor

EN

回答 2

Stack Overflow用户

发布于 2012-01-28 00:34:35

问题是您的read.table将column 1用作row.names,因此它丢失了它的列名("one")。当你把它写出来的时候,你必须做一些特殊的事情来找回"one“这个名字。

cbind(one=row.names(d), d)会将row.names添加为名称为"one“的列。然后,您只需禁用row.names和引号,并指定分隔符:

代码语言:javascript
复制
# 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为避免硬编码第一个列名,请不要在加载时丢失:

代码语言:javascript
复制
# 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

当然,如果您保留第一列的名称并像第一个示例中那样使用它,那么您仍然可以删除它。

票数 5
EN

Stack Overflow用户

发布于 2012-01-28 00:06:41

代码语言:javascript
复制
write.table(d,"filename")

您必须指定要使用的文件扩展名。希望它能起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9036297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档