2012-02-01 87 views
18

當我在R中使用read.csv()函數來加載數據時,我經常發現X已被添加到變量名稱中。我想我總是在第一個變量中看到它,但我可能是錯的。R-爲什麼將X添加到我數據框中的變量名稱中?

起初,我認爲R可能會這樣做,因爲我在變量名的開頭有一個空格 - 我不知道。第二,我曾經在某處讀過如果你有一個以數字開頭的變量,或者是一個非常短的變量名,R會添加X​​.變量名是所有文本和這個名字的長度變量是12個字符,所以它不短。

現在,這純粹是一種煩惱。我可以重新命名該列,但它確實增加了一個步驟,雖然只是一個小步驟。

有沒有辦法阻止流氓X從滲透我的數據框?

這裏是我的原代碼:

df <- read.csv("/file/location.filecsv", header=T, sep=",") 

這裏是有問題的變量:

str(orders) 
'data.frame': 2620276 obs. of 26 variables: 
$ X.OrderDetailID : Factor w/ 2620193 levels "(2620182 row(s) affected)",..: 105845 
+1

您可以發佈與XS和你使用的數據讀取代碼中的變量名檢查有效的變量名? – 2012-02-01 15:45:56

+1

我還是不明白*爲什麼會發生這種情況。事實上,它發生(主要是?)到第一個變量名稱暗示我,你在某種程度上以文件開頭的特殊字符結束了? – 2012-02-01 18:41:49

回答

32

read.tableread.csvcheck.names=的說法,你可以設置爲FALSE

例如,該輸入一個只包含頭的嘗試:

> read.csv(text = "a,1,b") 
[1] a X1 b 
<0 rows> (or 0-length row.names) 

> read.csv(text = "a,1,b", check.names = FALSE) 
[1] a 1 b 
<0 rows> (or 0-length row.names) 
+0

check.names = FALSE是勝利者....感謝您的幫助! – mikebmassey 2012-02-01 16:22:13

3

這是令人驚訝的行爲,但我認爲我們需要一個可重複的例子。也許你有一些隱藏/特殊字符隱藏在你的文件中?

names(read.csv(textConnection(
"abcdefghijkl, a1,2x"))) 

表現良好。你能否沿着這些線路舉例說明你的問題?

正如其他答案中所述,check.names=FALSE是一種可能的解決方法。你可以用make.namesread.csv deafults實驗,以確定該行爲......

2

正如所說的Gabor,默認情況下在你的標題行轉換名是有效的變量名(使用check.names = FALSE關閉這個功能)。這是使用功能make.names完成的。該功能的幫助頁面解釋了什麼構成了有效的變量名稱。

語法上有效的名稱由字母,數字和點或 下劃線字符,以字母或不進行 由若干點開始。名稱如「.2way」無效,並且 保留字也不是。

保留字列表位於幫助頁?reserved上。

另一個條件是變量名稱必須是10000個字符或更少,但make.names不會縮短它。所以要注意真的是與你的變量名稱詳細。

可以使用

library(assertive.code) 
is_valid_variable_name(x) 
+0

以每分鐘200個字符的平均打字速度 - 即輸入每個變量名稱50分鐘 - 哎! – James 2012-02-01 16:54:23

相關問題