我想用字符替换数据集列中的1值。我尝试过
dataset$out[dataset$out==1]<-'A'
但我收到警告消息:
Warning message: In `[<-.factor`(`*tmp*`, dataset$out == 1, value = c(1L, 1L, :
invalid factor level, NA generated
我做错了什么?
答案 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”。您可以根据需要将它们转换回因子。