在以下数据框中,
col1 <- c("g1","g2","g3",NA,"g4",NA)
col2 <- c(NA,"a1","a2",NA,"a3","a4")
df1 <-data.frame(col1,col2)
我想将col1中NA的行替换为col2的相应行。通过
提取包含NA的行是否正确row <- which(is.na(col1))
然后通过
从col2中提取字符extract <- df1$col2[row]
在此之后,我不知道如何用提取的字符替换col1中的NA。 请帮忙!
答案 0 :(得分:6)
您不需要which
。仅is.na(df1$col1)
就足以提供logical
索引。数据集的唯一问题是,根据您创建factor
的方式,这两列都是data.frame
类。最好使用stringsAsFactors=FALSE
中的data.frame(..)
作为参数来获取character
列。否则,如果替换时levels
中col2
中的col1
不存在,则会发出warning
条消息
# Warning message:
#In `[<-.factor`(`*tmp*`, is.na(df1$col1), value = c(1L, 2L, 3L, :
#invalid factor level, NA generated
在此,我正在将columns
转换为character
课程,然后再进行更换以避免上述警告。
df1[] <- lapply(df1, as.character)
indx <- is.na(df1$col1)
df1$col1[indx] <- df1$col2[indx]
df1
# col1 col2
#1 g1 <NA>
#2 g2 a1
#3 g3 a2
#4 <NA> <NA>
#5 g4 a3
#6 a4 a4