我想用字符串替换第22907行第1列。该列由多种因素组成。数据框中的第1列称为geneID。我尝试过以下方法:
df[22907,1] == 'CDEF'
但是这给出了以下错误:
警告讯息: 在
[<-.factor
(*tmp*
,iseq,value =“OKSM”)中: 无效因子水平,NA生成
我理解如何用一个值替换所有NA,但我只是想替换这个特定的NA。
编辑:很确定这个问题不是链接的问题的重复 - 我们得到了类似的错误,但基本问题是不同的。这解释了如何替换数据帧中的单个值。
答案 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/