我在R中读取文件时标题的变化?

时间:2012-07-06 15:42:50

标签: r

每当我使用带有选项read.csv()的{​​{1}}读取文件时,标题会以奇怪的(但可预测的)方式发生变化。应该读取header=T的标题名称变为"P(A<B)",例如:

"P.A.B."

我试图像这样修复它,但它不起作用:

> # when header=F:
> myfile1 <- read.csv(fullpath,sep="\t",header=F,nrow=3)
> myfile1
     V1    V2     V3
1    ID  Name P(A>B)
2 AB001 Alice  0.997
3 AB002   Bob  0.497
>
> # When header=T:
> myfile2 <- read.csv(fullpath,sep="\t",header=T,nrow=3)
> myfile2
     ID    Name P.A.B.
1 AB001   Alice  0.997
2 AB002     Bob  0.497
3 AB003 Charles  0.732

然后我尝试使用> names(myfile2) <- myfile1[1,] > myfile2 3 3 3 1 AB001 Alice 0.997 2 AB002 Bob 0.497 3 AB003 Charles 0.732 编写一个函数,该函数将采用任何向量sub()并返回向量"arbitrary.lengths.here.",但我实际上并没有得到任何结果,我开始怀疑我使这个问题比以前更复杂。

您如何处理此标题问题?我是否在"arbitrary(lengths>here)"的正确轨道上?

2 个答案:

答案 0 :(得分:6)

check.names=FALSE

中设置read.csv()
read.csv(fullpath,sep="\t", header=FALSE, nrow=3, check.names=FALSE)

来自?read.csv的帮助:

check.names

逻辑。如果为TRUE,则检查数据框中变量的名称,以确保它们是语法上有效的变量名。如果有必要,它们会被调整(通过make.names),以便确保它们没有重复。

答案 1 :(得分:2)

并非真正打算作为答案,但是对Rnewbs有帮助:这些标题作为因素读入(并导致第三列也是一个因素。棘手的names()赋值可能使用了它们的整数存储模式。@ Andrie已经为您提供了首选解决方案,但是如果您想重新分配名称(不会撤消对thrid列的损坏),您可以使用:

 names(myfile1) <- scan(file=fullpath, what="character" nmax=1 , sep="\t")
 myfile1 <- myfile[-1, ]    # gets rid of unneeded line