2016-02-26 94 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

相关问题