1

每当我使用read.csv()with option读取文件时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)",但我并没有真正得到任何结果,我开始怀疑我让这个问题变得比它必须的更复杂。

你将如何处理这个标题问题?我在正确的轨道上sub()吗?

4

2 回答 2

6

设置check.names=FALSEread.csv()

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

从帮助?read.csv

检查名称

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

于 2012-07-06T15:46:54.980 回答
2

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

 names(myfile1) <- scan(file=fullpath, what="character" nmax=1 , sep="\t")
 myfile1 <- myfile[-1, ]    # gets rid of unneeded line
于 2012-07-06T16:01:18.130 回答