每当我使用带有选项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)"
的正确轨道上?
答案 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