首页 > 解决方案 > 用字符串替换单个特定的 NA 值

问题描述

我想用字符串替换第 22907 行第 1 列。该列由因子组成。数据框中的第 1 列称为geneID。我尝试了以下方法:

df[22907,1] == 'CDEF'

但这给出了以下错误:

警告消息:In [<-.factor( *tmp*, iseq, value = "OKSM") : 无效因子水平,NA 生成

我了解如何用一个值替换所有 NA,但是我只想替换这个特定的值。

编辑:很确定这个问题不是链接问题的重复 - 我们遇到了类似的错误,但基本问题不同。这解释了如何替换数据框中的单个值。

标签: rdataframereplace

解决方案


我们将列转换为character,然后进行赋值

df[[1]] <- as.character(df[[1]])
df[22907,1] <- 'CDEF'

或者,如果我们需要将其保留为,请在分配之前factor创建“CDEF”作为列之一levels

levels(df[[1]]) <- c(levels(df[[1]]), 'CDEF')
df[22907,1] <- 'CDEF'
df[22907, 1]
#[1] CDEF
#Levels: A B C D E CDEF

数据

set.seed(24)
df <- data.frame(geneID = sample(LETTERS[1:5], 30000, replace = TRUE), 
            col2 = rnorm(30000))
df[22907, 1] <- NA

推荐阅读