2012-09-26 41 views
0

我有一個包含1005個變量稱爲VarChange的數據幀,例如:řcolnames:一點字符變量名稱變更爲數字

row.name SamplingEvent Year Zenaida_macroura . . . 1005 variables 
1 12367  S41   2005 0 
2 12369  S42   2005 X 
3 12370  S43   2005 4 
4 OldSppName SamplingEvent Year Zenaida_macroura 
5 NewSppName SampEvent  Year Zenamacr 

我的目標是改變數據幀的列名稱爲行「NewSppName」(當前變量名的最大8個字母代碼)。這是爲了不鬆散跟蹤ArcMap中的各種變量(將所有變量名稱截斷爲8個字符)。

每一件事情看起來很不錯(即,R輸出相應NewSppNames)時,我問:

Var['NewSppName',] 

但是當我使用:

colnames(VarChange) <- VarChange['NewSppName', ] 

colnames(VarChange) <- as.character(VarChange["NewSppName",]) 

我得到以下輸出:

row.names 7    Year 8   . . . 1005 variables 
1 12367  S41   2005 0 
2 12369  S42   2005 X 
3 12370  S43   2005 4 
4 OldSppName SamplingEvent Year Zenaida_macroura 
5 NewSppName SampEvent  Year Zenamacr 

95%的變量確實將名稱更改爲NewSppName中的值,但十幾個更改爲數字而不是NewSppName中存在的字符名稱。

任何原因爲什麼?任何解決方案?

+1

歡迎的StackOverflow!你能用'dput'提供一個可重複的例子,也許只是一個數據樣本? (我們無法確定每列的數據類型是什麼) –

+0

新列名稱是否真的是原始數據中的一行?這看起來很奇怪,因爲這會迫使所有變量成爲「字符」或「因子」? – mnel

+0

請注意,「SampEvent」有九個字符。 – flodel

回答

0

使用索引時,您需要使用邏輯或數字或rownames中的一個。僅僅因爲你有一個名爲'row.name'的列不會告訴R將它用於索引。

VarChange <- read.table(text=" row.name SamplingEvent Year Zenaida_macroura 
1 12367  S41   2005 0 
2 12369  S42   2005 X 
3 12370  S43   2005 4 
4 OldSppName SamplingEvent Year Zenaida_macroura 
5 NewSppName SampEvent  Year Zenamacr 
", header=TRUE) 
> as.character(VarChange["NewSppName",]) 
[1] "NA" "NA" "NA" "NA" 

因此,不是任意使用「5」或構建正確的邏輯矢量VarChange$row.names=="NewSppName"。您可能會得到不同的結果,因爲您的工作區中有一些名稱爲「NewSppName」的不同對象。 (。) - 您還需要通過sapply安全地轉換爲字符()荷蘭國際集團as.character,因爲它們是不同層次和全球as.character因素將不會成功:

> sapply(VarChange[VarChange$row.name=="NewSppName",] ,as.character) 
     row.name SamplingEvent    Year Zenaida_macroura 
    "NewSppName"  "SampEvent"   "Year"  "Zenamacr" 

> colnames(VarChange) <- sapply(VarChange[5,] ,as.character) 
> VarChange 
    NewSppName  SampEvent Year   Zenamacr 
1  12367   S41 2005    0 
2  12369   S42 2005    X 
3  12370   S43 2005    4 
4 OldSppName SamplingEvent Year Zenaida_macroura 
5 NewSppName  SampEvent Year   Zenamacr 
+0

謝謝迪文。命令行「colnames(VarChange)< - sapply(VarChange [5,],as.character)」工作得很好。邏輯向量VarChange $ row.names ==「NewSppName」實際上不是輸出預期的結果,而是使用您的建議「colnames(VariableChange)< - sapply(VariableChange [」NewSppName「,],as.character)」我能夠得到預期的產出。我不相信名稱'NewSppName'是工作區中的另一個對象。無論如何:事情現在都在起作用。再次感謝! – JoeBird