替换数据框中的特定行

时间:2014-12-10 13:13:59

标签: r dataframe rows

在以下数据框中,

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

1 个答案:

答案 0 :(得分:6)

您不需要which。仅is.na(df1$col1)就足以提供logical索引。数据集的唯一问题是,根据您创建factor的方式,这两列都是data.frame类。最好使用stringsAsFactors=FALSE中的data.frame(..)作为参数来获取character列。否则,如果替换时levelscol2中的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