首页 > 解决方案 > 更改因子变量的水平

问题描述

您好, 我的表 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 和“”(空)。

当我使用函数casttable制作 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

如您所见,它并没有改变值的显示,只是改变了我的变量的名称。如何重新排序因子变量以更改显示?

比你提前的帮助。

标签: rvariables

解决方案


您只是在上面的方法中覆盖了您的级别。在下面试试这个。它应该维护您的实际数据并根据需要重新排序您的级别。

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

我还建议探索这个forcats包。它有很多关于因素及其水平的功能。


推荐阅读