1

read.csv()オプションを使用してファイルを読み込むと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=FALSEで設定read.csv()

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

のヘルプから?read.csv

check.names

論理的。TRUEの場合、データフレーム内の変数の名前がチェックされ、構文的に有効な変数名であることが確認されます。必要に応じて、(make.namesによって)調整され、重複がないことを確認します。

于 2012-07-06T15:46:54.980 に答える
2

答えとしては実際には意図されていませんが、Rnewbsに役立つことを意図しています:これらのヘッダーは因子として読み込まれました(そして3番目の列も因子になりましたnames()。厄介な割り当てはおそらく整数ストレージモードを使用していました。@Andrieはすでにあなたに与えました推奨される解決策ですが、名前を再割り当てするだけの場合(3番目の列への損傷を元に戻すことはできません)、次を使用できます。

 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 に答える