更改因子变量的水平

时间:2019-02-05 14:40:50

标签: r variables

你好 我的表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

如您所见,它仅更改变量名的值显示。 我如何重新排序因子变量以更改显示?

提前谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您只是在上面的方法中覆盖了您的级别。请在下面尝试。它应该保留您的实际数据并根据需要重新排列级别。

df$cls1=factor(df$cls1,levels=c("S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10", "S11", "SX", ""))

我还建议您探索forcats软件包。在因素及其水平方面,它具有很多功能。