首页 > 解决方案 > 用数据集列中的字符替换值

问题描述

我想用一个字符替换数据集列中的 1 值。我试过了

dataset$out[dataset$out==1]<-'A'

但我收到警告消息:

Warning message: In `[<-.factor`(`*tmp*`, dataset$out == 1, value = c(1L, 1L,  :
invalid factor level, NA generated

我做错了什么?

标签: rdataframe

解决方案


正如上面的评论所指出的,你的列“out”是一个因素,试试 str(dataset$out)。在因子中,您具有预定义值的级别,它们用于多种目的。

例如:

x = LETTERS[1:5]
x = x[-1]
table(x[-1])

x = factor(LETTERS[1:5])
levels(x)
x = x[-1]
levels(x)
table(x[-1])

在上面的示例中,即使您从向量中删除了“A” x,因为级别是预定义的,它也会在您对它进行表列时显示它缺少“A”。

因此,您不能将因子列中的元素替换为级别中不存在的元素。

x = factor(LETTERS[1:5])
# ok
x[1] = "E"
# not ok
x[1] = "F"

因此,对于您的数据,请执行以下操作:

dataset <- data.frame(id=1:5,out=c('1',LETTERS[2:5]))
dataset

  id out
1  1   1
2  2   B
3  3   C
4  4   D
5  5   E

dataset$out <- with(dataset,replace(as.character(out),out=='1','A'))
dataset

  id out
1  1   A
2  2   B
3  3   C
4  4   D
5  5   E

dataset$out <- factor(dataset$out)

在上面,我首先将它们转换为字符,然后将那些 '1' 替换为 'A'。如果需要,您可以在之后将它们转换回因子。


推荐阅读