在以下数据框中,
col1 <- c("g1","g2","g3",NA,"g4",NA)
col2 <- c(NA,"a1","a2",NA,"a3","a4")
df1 <-data.frame(col1,col2)
Run Code Online (Sandbox Code Playgroud)
我想用col1中的NA替换col2中相应行的行.通过提取包含NA的行来继续是否正确
row <- which(is.na(col1))
Run Code Online (Sandbox Code Playgroud)
然后从col2中提取字符
extract <- df1$col2[row]
Run Code Online (Sandbox Code Playgroud)
在此之后,我不知道如何用提取的字符替换col1中的NA.请帮忙!
你不需要which
.只是is.na(df1$col1)
足以给出一个logical
索引.数据集的唯一问题是两个列都是factor
基于您创建的类的类data.frame
.最好stringsAsFactors=FALSE
在data.frame(..)
as参数中使用以获取character
列.否则,如果levels
在替换时col2
不存在in col1
,则会给出warning
消息
# Warning message:
#In `[<-.factor`(`*tmp*`, is.na(df1$col1), value = c(1L, 2L, 3L, :
#invalid factor level, NA generated
Run Code Online (Sandbox Code Playgroud)
在这里,我在进行替换之前将其转换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
Run Code Online (Sandbox Code Playgroud)