r - 更改因子变量的水平
问题描述
您好, 我的表 df 是:
Nr.of.members COD_PAY_CRM cls1 cls2
1 342 TZ S8
2 1 IT S3 S4
3 4 CL S0 S0
4 1 AS
5 6 UA S4 S8
6 100 OM S11 S9
...
cls1 和 cls2 具有因子变量,级别为 S0 S1、S2、.. S10、S11 SX 和“”(空)。
当我使用函数cast或table制作 cls1~cls2 的频率表时,显示按字母顺序:“” S0 S1 S10 S11 S2 S3 ...我尝试在使用以下代码制作频率表之前对其进行重新排序:
levels(df$cls1)=as.factor(c("S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10", "S11", "SX", ""))
它会更改显示或列名,但不会更改值,例如在开始时我有
cls1 V1 S0 S1 S10 S11 S2
1 684895 21 848 6956 11493 64647
2 S0 0 25987 269 3 120 9152
3 S1 0 545 5575 190 235 20561
4 S10 0 31 303 3522 1487 6312
5 S11 0 81 140 1763 157984 42024
6 S2 0 14690 12791 6674 51303 593072
#V1 is the level "" that have been remane automatically by R
当我更改级别时,结果是:
cls1 S0 S1 S2 S3 S4 S5
1 S0 684895 21 848 6956 11493 64647
2 S1 0 25987 269 3 120 9152
3 S2 0 545 5575 190 235 20561
4 S3 0 31 303 3522 1487 6312
5 S4 0 81 140 1763 157984 42024
6 S5 0 14690 12791 6674 51303 593072
如您所见,它并没有改变值的显示,只是改变了我的变量的名称。如何重新排序因子变量以更改显示?
比你提前的帮助。
解决方案
您只是在上面的方法中覆盖了您的级别。在下面试试这个。它应该维护您的实际数据并根据需要重新排序您的级别。
df$cls1=factor(df$cls1,levels=c("S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10", "S11", "SX", ""))
我还建议探索这个forcats
包。它有很多关于因素及其水平的功能。
推荐阅读
- flutter - 如何防止 Flutter 下拉菜单隐藏其父对话框?
- javascript - 编写 ExpressJS 应用程序时,为什么不使用“new”关键字?
- javascript - 有人可以帮助我如何在放置和删除请求后立即呈现
- python-3.x - Python SQLite 将数据插入第一条记录
- javascript - 如何在搜索框中为文本添加标签
- highcharts - 如何删除 HighCharts 新的悬停效果?
- javascript - 对象作为 React 子对象无效......但它是一个数组?
- java - 如何在一个较大的矩形中获得多个矩形
- ruby - 使用条件运算符“for”和 Ruby 的 .each 在哈希中打印值
- assembly - 如何在寄存器中存储 1000 位数字