r - 用数据集列中的字符替换值
问题描述
我想用一个字符替换数据集列中的 1 值。我试过了
dataset$out[dataset$out==1]<-'A'
但我收到警告消息:
Warning message: In `[<-.factor`(`*tmp*`, dataset$out == 1, value = c(1L, 1L, :
invalid factor level, NA generated
我做错了什么?
解决方案
正如上面的评论所指出的,你的列“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'。如果需要,您可以在之后将它们转换回因子。
推荐阅读
- java - 显示为混合分数输入的值时出错
- swift - 根据函数的输出分配变量字符串值
- cmake - 在使用 CMake 安装期间创建指向不同文件夹中库的符号链接
- jsf - Apache Shiro 使用“unauthorizedUrl”
- json - 如何查找是否在 Liquid for Shopify 的字符串中找到单词?
- .net - 无法将 dotnet-sdk 升级到 5.0.200
- angular - Angular:检测父组件数据变化
- azure - 应用服务维护期间 InProc 会话会发生什么情况?
- redux - 取消订阅后触发 Redux 订阅
- git - 如何忽略 .gitignore 文件中的目录?