2013-12-12 18 views
0

我想重新編碼一個變量。重新編碼和分配的目標擴展到非語言對象

library(car) 

沒有爲

bd2011$diag = recode(bd2011$value, 
       "'7400' <- 'dia1'; else = 'b'") 

bd2011$diag = recode(bd2011$value, 
       " c('7400','7401') <- 'dia1'; else = 'b'") 

沒有問題,就會產生

Error in c("7400", "7401") <- "dia1" : 
    target of assignment expands to non-language object 

問題是什麼?如何糾正?謝謝。

回答

2

你不應該單引號的LHS表達式(除非他們是字符值),你不應該使用"<-"。該值對應該交付爲:

c(7,8,9)='high' 

你可能僥倖成功的一個載體,單個項目分配,但這個你正在嘗試進行分配從一個項目兩個字符值:

c('7400','7401') <- 'dia1' 

recode功能實際上是在做其他方向的分配,因此,使用"<-"真的混亂以及不正確的語法。

你可以看到爲什麼的問題將通過查看循環通過「recode.list」的代碼開發:

for (term in recode.list) { 
    if (0 < length(grep(":", term))) {...} 
    else if (0 < length(grep("^else=", squeezeBlanks(term)))) { ...} 
    else {...} 

注意:不考慮有人會使用"<-""->"的可能性。

那麼這是什麼,是在過去別的 - 結論(這會忽略「< - 」):

 set <- eval(parse(text = strsplit(term, "=")[[1]][1])) 
     target <- eval(parse(text = strsplit(term, "=")[[1]][2])) 
     for (val in set) { 
      if (is.na(val)) 
       result[is.na(var)] <- target 
      else result[var == val] <- target 

所以它應該很容易地看到,LHS正在評估並分配給來自RHS的「目標」。所以如果有一個方向用於轉讓,那應該是"--->"

+0

謝謝。我摘下了報價,並沒有錯誤。但價值是chr。 > str(bd2011) 'data.frame':\t 1523420 ob​​s。 6變量: $ data.yr:chr「2011」「2011」「2011」「2011」... $ hospital.id:chr「0622」「0622」「0622」「0622」... $ patient.ctrl.num:chr「1564036」「1564127」「1564182」「1564215」... $ medical.health.rec.num:chr「007054047」「007054055」「007054059」「007054061」... ... $變量:因子w/19級別「診斷1」,「診斷2」,..:1 1 1 1 1 1 1 1 1 1 ... $ value:chr「V3000」「V3000」「V3000」「V3000」.. – user1582755

+0

該評論相當無用。請刪除它並編輯您的Q以使格式化的材料成爲可重現的示例。 –