这个主题已经在这里开发,但我仍然在努力。
我有以下样本:
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$SHIP_TYPE_VF
中的NA替换为df$shipType
中的值。
当我使用以下命令时:
test$SHIP_TYPE_VF[is.na(test$SHIP_TYPE_VF)] <-
as.character(test$shipType[is.na(test$SHIP_TYPE_VF)])
我有这个:
警告消息:在
[<-.factor
(*tmp*
,is.na(test $ SHIP_TYPE_VF)中, value = c(NA,:无效因子级别,NA生成
我尝试了其他几个选项。我知道2列应该是因素,但即使有因素它也不起作用。
欢迎提供帮助!
答案 0 :(得分:2)
列是factor
类,我们可以将它转换为character
类,它应该可以正常工作。发生错误的原因是另一个&#39; shipType&#39;并没有出现在&SHCH_TYPE&#39;。
test[] <- lapply(test, as.character)
i1 <- is.na(test$SHIP_TYPE_VF)
test$SHIP_TYPE_VF[i1] <- test$shipType[i1]
或者,我们不是转换为character
课程,而是更改levels
的{{1}}以包含&#39; shipType`中的元素
SHIP_TYPE_VF
答案 1 :(得分:0)
您可以尝试ifelse()
功能
df$SHIP_TYPE_VF<- ifelse(is.na(df$SHIP_TYPE_VF), as.character(df$shipType), as.character(df$SHIP_TYPE_VF))