2014-01-14 49 views
0

我想創建一個data.frame列名指定。當我輸入以下內容:創建數據時X和點添加到列名框架

df_ht <- data.frame("Teams" = NA, "Shots" = NA, "Shots On Target" = NA) 

我得到以下標題:

   Teams Shots Shots.On.Target 
1    NA NA    NA 

後來我把旁邊的名稱空間來嘗試間隔出來的實際列名稱:

df_ht <- data.frame(" Teams " = NA, " Shots " = NA, " Shots On Target " = NA) 

我得到了這個:

  X.Teams. X.Shots. X.Shots.On.Target. 
1   NA   NA     NA 

爲什麼會出現X.?我怎樣才能擺脫.

+3

閱讀'?data.frame'文檔,並特別注意'check.names'參數。按照提供的鏈接。 – joran

+0

在http://stackoverflow.com/questions/3411201/specifying-column-names-in-a-data-frame-changes-spaces-to找到解決方案。需要將check.names設置爲False。 – Dombey

+1

事實上,正如它在文檔中所說的那樣。 – joran

回答

2

當您創建data.frame時,默認情況下它具有選項check.names = TRUE。這意味着R將檢查提供的名稱是否是語法上有效的名稱,並且它們是使用make.names創建的。

?make.names,語法上有效的名稱:

[..]由字母,數字和點或下劃線字符 並以字母或後面沒有數點開始。名稱 (如「.2way」)無效,保留字也不是。

另外,無效字符被點代替。

如果你

df_ht <- data.frame(" Teams " = NA, " Shots " = NA, 
        " Shots On Target " = NA, check.names=FALSE) 

你會得到你想要的東西,但不建議這樣做的。調用或使用data.frame中的變量會有很多複雜性(如需要在列/變量名稱後面使用back tick或失去自動完成功能)。列名的用途是使用它們,如df_ht$Teams,並且能夠操縱它們,打印時不會看起來很好。

+0

給予列名的好處在於它們很容易操作。但請注意,使用back ticks是解決這個問題的一種方法。 – Dombey

+0

@Dombey,那是我剛纔談到的併發症。 –