2015-08-21 256 views
1

變量Recence_Connexion_Jrs由「NA」和一些數字(從1到100)組成,我試圖使「NA」等於「不打開」,並且也將這些數字分成3組,並且組的標籤是字符串的類型。 例如:R:將數字數據和NA轉換爲字符串

Recence_Connexion_Jrs   Connexion 
     NA       No open 
     NA       No open 
     NA       No open 
     1      connexion 0-7 
     10      connexion 7-30 

,我使用的代碼:

setDT(newdata)[!duplicated(newdata),Connexion:=ifelse(is.na(Recence_Connexion_jrs), 
"No Open",cut(Recence_Connexion_jrs,breaks=c(-Inf,7,30,+Inf), 
labels=c("connexion 0-7","connexion 7-30","connexion 30+")))] 

,但它給了錯誤的結果。

我該如何解決呢?

+0

請提供一個可重複的例子,包括輸入和期望的輸出。 – Heroka

+1

[閱讀關於如何給出一個可重複的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – Jaap

+0

我認爲有''' 'setDT(newdata' – Jaap

回答

3

我建議分兩步進行:(1)使用cut(如上所述);(2)使用replace作爲NA的值。

下面是一個向量的例子。沒有理由你不能做類似的事情在data.table

set.seed(123) 
vec <- sample(c(1:40, NA), 100, TRUE) 
new <- cut(vec, c(-Inf, 7, 30, +Inf), 
      labels=c("connexion 0-7", "connexion 7-30", "connexion 30+")) 
new <- replace(as.character(new), is.na(new), "No open") 

或者,在一個小data.table給你看更輕鬆:

library(data.table) 
DT <- data.table(vec = c(1, NA, 8, 20, NA, 32)) 
DT[, new := as.character(
    cut(vec, c(-Inf, 7, 30, +Inf), 
     labels = c("connexion 0-7", "connexion 7-30", "connexion 30+")))][ 
     , new := replace(new, is.na(new), "No open") 
     ][]  
# vec   new 
# 1: 1 connexion 0-7 
# 2: NA  No open 
# 3: 8 connexion 7-30 
# 4: 20 connexion 7-30 
# 5: NA  No open 
# 6: 32 connexion 30+