r - 我怎样才能使数据框中的一个因素永久地成为数字?
问题描述
首先让我说我对编程和 R 非常陌生,所以这可能是一个愚蠢的问题。但它就在这里。
我正在处理一个包含来自语料库的元数据的大型数据框。一栏包含文本的熟练程度(即“B1”、“B2”、“C1”、“C2”)。我已经能够将这些因子水平重命名为“1”、“2”、“3”和“4”,但我需要将它们设为数字,以便我可以将此列用作线性建模中的因变量。我尝试了一些建议的方法,但这些方法不起作用,我不知道为什么。
我尝试了以下代码,但是当我检查结构时,它仍然是一个具有四个级别的因子,并且不是数字:
> as.numeric(as.character(df$proficiency))
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[42] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
...
[452] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
> str(proficiency)
Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
#I have also tried this, but it does not work either.
> df$proficiency<-as.numeric(as.character(df$proficiency))
> str(proficiency)
Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
为什么会这样?我究竟做错了什么?
解决方案
这里的问题是您将数字分配给名为 proficiency 的数据框列,但随后str()
您正在检查一个名为 proficiency 的变量。正如@joran 在评论中所说,如果您进行str(df$proficiency)
此转换应该是正确的。同样的转换也可以通过
df$proficiency<-as.numeric(levels(df$proficiency))[df$proficiency]
对于大型数据帧,这稍微快一些
推荐阅读
- java - 如何编写一个函数来并行查找大于 N 的值
- javascript - “+=”的嵌套问题(javascript)
- c# - 使用 Dotmim 同步框架同步两个 SQL Server 数据库
- python - 在 Flask 中启动 App 之前无法初始化值
- javascript - 我怎样才能从标记到 javascript
- google-docs-api - Google docs api 插入分栏符
- three.js - 如何在threejs中用鼠标在3D表面上画一条线
- mongodb - Strapi Server 无法正常启动。/documentation/: policy.split 不是函数
- python - 在python中模拟线程定时器事件超时间隔
- windows-7 - 程序无法启动,因为缺少 api-ms-win-downlevel-kernel32-l2-1-0.dll - UE4 更新后