用数据集列中的字符替换值

时间:2019-11-27 15:34:48

标签: r dataframe

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

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

但我收到警告消息:

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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

正如上面的注释所指出的那样,列“ 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])

在上面的示例中,即使您从向量x中删除了“ A”,由于级别是预定义的,它也表明您在上表时会丢失“ 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)

在上面,我先将它们转换为字符,然后用“ A”替换那些“ 1”。您可以根据需要将它们转换回因子。