替换数据框中的特定行

Wol*_*ang 4 r rows dataframe

在以下数据框中,

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.请帮忙!

akr*_*run 6

你不需要which.只是is.na(df1$col1)足以给出一个logical索引.数据集的唯一问题是两个列都是factor基于您创建的类的类data.frame.最好stringsAsFactors=FALSEdata.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)

在这里,我在进行替换之前将其转换columnscharacter类以避免上述警告.

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)