用字符串替换单个特定NA值

时间:2018-05-28 06:13:01

标签: r dataframe replace

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

df[22907,1] == 'CDEF'

但是这给出了以下错误:

  

警告讯息:       在[<-.factor*tmp*,iseq,value =“OKSM”)中:         无效因子水平,NA生成

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

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

2 个答案:

答案 0 :(得分:2)

我们将列转换为character,然后执行作业

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

或者如果我们需要将其保留为factor,请创建&#39; CDEF&#39;作为分配前列的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

答案 1 :(得分:1)

您需要先添加级别'CDEF',然后才能添加级别 - 因素要求级别存在才能分配。 ==也未分配,使用=或更好<-。通过名称而不是位置(df[22907, 'geneID'])来调用列也是一种好习惯。

levels(df[,1]) <- c(levels(df[,1]), 'CDEF')
df[22907,1] <- 'CDEF'

您可以在此处详细了解如何处理和考虑因素:https://swcarpentry.github.io/r-novice-inflammation/12-supp-factors/