2014-06-17 210 views
5

我試圖重新編寫R中的一個因素變量,使用下面的代碼:[R重新編碼變量 - 意外INCOMPLETE_STRING

library(car) 
napier_captureComplexity=recode(napier$a_SpatialConnectivity,"'1 - Very simple and clear:  no diagrams, single sheets'=1;'2 - Reasonably simple: some simple diagrams or second sheets'=2;'3 - Reasonably complex: multiple diagrams or sheets but can be followed'=3;'4 - Moderately complex: multiple diagrams and sheets'=4;'5 - Very complex'=5;",as.factor.result=FALSE) 

並得到以下錯誤消息:

Error in parse(text = range[[1]][1]) : <text>:1:1: unexpected INCOMPLETE_STRING 1: '4 - Moderately complex 

隨着^下方編號4

我不知道什麼是造成這種情況,我想知道:通過代碼,但我沒有使用c()和代碼在數據集中的其他因素執行罰款有si在他們的milar字符串值。

任何幫助表示讚賞!

回答

1

recode似乎解釋爲:代表一個值的範圍,即使它在一個字符串中,而且:被解釋爲提前終止字符串。例如:

x = c("a","b","c") 
recode(x, "'a'=1; 'b'=2; 'c'=3;") 
[1] 1 2 3 

x = c("a:d","b","c") 
recode(x, "'a:d'=1; 'b'=2; 'c'=3;") 
Error in parse(text = range[[1]][1]) : 
    <text>:1:1: unexpected INCOMPLETE_STRING 
1: 'a 
    ^

在我嘗試了字符串中的每個實例終止於:,導致錯誤。

+0

這不是一個解決方案,我認爲。 ) –

4

這實際上是因爲你的描述中的「:」。該函數使用一些奇數的evalstrsplit語句來工作。它最終在「:」中分裂,因爲這是它們語法中的一個特殊代碼,似乎沒有辦法逃避它。

但我假設napier$a_SpatialConnectivity是給定水平的因素?您可以通過明確設置factor()調用中的級別來重新編碼變量。

mylevels <- c("1 - Very simple and clear:  no diagrams, single sheets", 
    "2 - Reasonably simple: some simple diagrams or second sheets", 
    "3 - Reasonably complex: multiple diagrams or sheets but can be followed", 
    "4 - Moderately complex: multiple diagrams and sheets", 
    "5 - Very complex") 

napier_captureComplexity <- as.numeric(factor(napier$a_SpatialConnectivity, levels=mylevels)) 

這將命令水平1:5,這正好是你試圖重新編碼它們的方式。

+0

我遵循你的方法,所有的值變成了「NA」...你確定你的方法有效嗎? –

+0

是的,我確定。如果在定義'mylevels'後定義'napier <-data.frame(a_SpatialConnectivity = sample(mylevels,20,replace = T))',代碼將運行併產生數值,而不是NA。 – MrFlick