2012-07-06 58 views
1

每當我使用read.csv()和選項header=T讀入文件時,標題會以奇怪(但可預測)的方式變化。頭文件名這應該閱讀"P(A<B)"成爲"P.A.B.",例如:當我在R中讀取文件時,標題中的更改?

> # 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()的正確軌道上?

+1

'read.csv'及其父函數'read.table'有一個參數'check.names',默認爲'TRUE'。這會改變奇數字符或以數字開頭的名字,以達到更可接受的命名約定。嘗試用'check .names = FALSE'。 – Justin 2012-07-06 15:46:37

+0

謝謝賈斯汀!這正是我所期待的。 – user1440196 2012-07-06 15:48:24

回答

6

check.names=FALSEread.csv()

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

從幫助?read.csv

check.names

邏輯。如果爲TRUE,則檢查數據框中變量的名稱以確保它們是語法上有效的變量名稱。如果有必要,它們會被調整(通過make.names),以確保它們沒有重複。

2

並非真正意義上的答案,而是爲了對Rnewbs有所幫助:這些標題被讀入爲因素(並且導致第三列也是一個因素,扭曲的names()賦值可能使用了它們的整數存儲模式。 @Andrie已經給了你首選的解決方案,但是如果你只想重新分配名稱(這不會消除第三列的損壞),你可以使用:

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

不錯的替代方法,謝謝! – user1440196 2012-07-06 16:14:33

相關問題