2016-02-26 55 views
-1

此主題已在此處開發,但我仍在爲此努力。用同一行中的另一個單元替換「NA」與R

我有以下樣品:

shipType SHIP_TYPE_VF 
UNDEFINED   <NA> 
CARGO   <NA> 
FISHING Passenger Ship 
FISHING   <NA> 
UNKNOWN   <NA> 

structure(list(shipType = structure(c(3L, 1L, 2L, 2L, 4L), .Label = 
c("CARGO", "FISHING", "UNDEFINED", "UNKNOWN"), class = "factor"), 
SHIP_TYPE_VF = structure(c(NA, NA, 1L, NA, NA), .Label = "Passenger 
Ship", class = "factor")), .Names = c("shipType", "SHIP_TYPE_VF"), 
row.names = c(NA, -5L), class = "data.frame") 

我願與df$shipType值來代替NA在df$SHIP_TYPE_VF

當我使用下面的命令:

test$SHIP_TYPE_VF[is.na(test$SHIP_TYPE_VF)] <- 
as.character(test$shipType[is.na(test$SHIP_TYPE_VF)]) 

我有這樣的:

警告消息:在[<-.factor*tmp*,is.na(測試$ SHIP_TYPE_VF) 值= c(NA,:無效因子水平,產生的NA爲

我嘗試了其他幾個選項。我明白,2列應該是因素,但即使有因素,它也不起作用。

歡迎光臨!

回答

2

該列爲factor類,我們可以將其轉換爲character類,它應該工作正常。發生錯誤是因爲其他'shipType'中的級別不存在於'SHIP_TYPE'中。

test[] <- lapply(test, as.character) 
i1 <- is.na(test$SHIP_TYPE_VF) 
test$SHIP_TYPE_VF[i1] <- test$shipType[i1] 

或代替轉換爲character類,我們改變了SHIP_TYPE_VFlevels包括在元素的shipType`

levels(test$SHIP_TYPE_VF) <- c(levels(test$SHIP_TYPE_VF), 
          levels(test$shipType)) 
test$SHIP_TYPE_VF[i1] <- test$shipType[i1] 
0

你可以嘗試ifelse()功能

df$SHIP_TYPE_VF<- ifelse(is.na(df$SHIP_TYPE_VF), as.character(df$shipType), as.character(df$SHIP_TYPE_VF)) 
+0

謝謝,這工作得很好 – Floni

相關問題