R 如何通过级别名称的alpha排序更改因子变量的默认顺序

R 如何通过级别名称的alpha排序更改因子变量的默认顺序,r,R,当我使用R重新编码数据时,我面临一个问题 我有一个变量,叫做timing\u expense,它是一个数字变量。其中的数据是连续值。我想把它们重新编码成一个组,作为因子值 数据样本如下所示: timng_spend 1 34 2 45 2 8 22 10 28 62 13 16 58 49 25 69 52 71 10 21 1 ....etc group_time=function(timing_spend){ if (timing_spend >= 0 & timi

当我使用R重新编码数据时,我面临一个问题

我有一个变量,叫做
timing\u expense
,它是一个数字变量。其中的数据是连续值。我想把它们重新编码成一个组,作为因子值

数据样本如下所示:

timng_spend
 1
34
 2 
45
 2
 8
22
10
28
62
13
16
58
49
25
69
52
71
10
21
1
....etc
group_time=function(timing_spend){
if (timing_spend >= 0 & timing_spend <= 12){
return('0-12 Month')
}else if(timing_spend > 12 & timing_spend <= 24){
return('12-24 Month')
}else if (timing_spend > 24 & timing_spend <= 48){
return('24-48 Month')
}else if (timing_spend > 48 & timing_spend <=60){
return('48-60 Month')
}else if (timing_spend > 60){
return('> 60 Month')
}}

assignment$time_group=sapply(assignment$timing_spend,group_time)
assignment$time_group=as.factor(assignment$time_group)
我使用的R代码如下所示:

timng_spend
 1
34
 2 
45
 2
 8
22
10
28
62
13
16
58
49
25
69
52
71
10
21
1
....etc
group_time=function(timing_spend){
if (timing_spend >= 0 & timing_spend <= 12){
return('0-12 Month')
}else if(timing_spend > 12 & timing_spend <= 24){
return('12-24 Month')
}else if (timing_spend > 24 & timing_spend <= 48){
return('24-48 Month')
}else if (timing_spend > 48 & timing_spend <=60){
return('48-60 Month')
}else if (timing_spend > 60){
return('> 60 Month')
}}

assignment$time_group=sapply(assignment$timing_spend,group_time)
assignment$time_group=as.factor(assignment$time_group)
group\u time=功能(计时花费){
如果(计时花费>=0,计时花费12,计时花费24,计时花费48,计时花费60){
返回(“>60个月”)
}}
分配$time\u group=sapply(分配$time\u花费,组时间)
分配$time\U group=as.factor(分配$time\U group)
当我使用
str
功能检查我的数据时,它显示
“系数w/5级”>60个月、“-0-12个月”、“…”为1、2、3
。。。等

这不是我想做的。我想把60个月作为5个月,而不是1个月

有人能帮我修改吗?或者这是R解释因子水平变量的自动机制? 如你所见,这里因子的等级是关联的。我想把“>60个月”移到最右边,这意味着它应该是5,而不是1

PS:我不在这里提供数据示例,因为我认为我们可能不需要它。

不要使用
if(){}else{}
这通常是R数据管理任务中的错误方法,而是要学会使用
cut
findInterval
。我没有用一个新的函数名来包装它,因为
cut
已经定义好了,但是如果您想创建一个特定的、狭义定义的函数来完成这个分区,那么您显然可以这样做

     (group_time= cut( timng_spend, breaks=c(0, 12,24,48,60, Inf), 
                   labels= c( '0-12 Month', '12-24 Month', '24-48 Month', 
                              '48-60 Month', ">60 Months") ) )
 [1] 0-12 Month  24-48 Month 0-12 Month  24-48 Month 0-12 Month  0-12 Month 
 [7] 12-24 Month 0-12 Month  24-48 Month >60 Months  12-24 Month 12-24 Month
[13] 48-60 Month 48-60 Month 24-48 Month >60 Months  48-60 Month >60 Months 
[19] 0-12 Month  12-24 Month 0-12 Month 
Levels: 0-12 Month 12-24 Month 24-48 Month 48-60 Month >60 Months

如果您这样做,任何图形都应该正确显示(在您看来),因为它们将采用因子级别属性的顺序。

请您添加部分数据,然后您希望得到什么。@Alice嗨,Alice,我的代码重新编码是正确的。我所期望的是,我创建的因子水平变量如下所示(这是我使用“str”函数检查数据时得到的结果):因子w/5水平“0-12个月”、“12-24个月”、“24-48个月”、“24-48个月”为1、2、3……等等。因此,它意味着“>60个月”应该是5,而不是1。然而,当我用R代码重新编码变量时,它显示“>60个月”“你好。如果您给出一个对我和所有其他人都非常有用的输出示例。您可能会发现使用
cut
将连续变量按范围切割成有序因子更容易。可能重复我尝试过的方法,从您的代码中,它将大于60的任何值定义为NA,当我使用“Str”函数检查时,它没有出现在列表中。虽然您定义了级别,但是从数据来看,它显示为间隔:例如:(1,12)。现在您看到了一个完美的示例,其中数据支持代码测试。我会耐心等待你改进你的问题。我不认为做测试用例是受访者的责任。
cut
函数确实有一些关于如何处理中断向量末尾的内容的潜在问题。我通常使用带有断点向量的
findInterval
函数,断点向量两边是
-Inf
Inf
@42。我上传了变量样本。这就是你想要的吗?@42我想我已经解决了,当我使用cut函数时,在最后一个函数中添加了Inf。然而,另一个问题突然出现。我想将group_time变量转换为factor变量,因为在下面的分析中需要它。如果我使用剪切函数,我就做不到,你知道吗?我使用
scan
读取了中的值(并使用了你的拼写),发现了几个错误(包括一个无关的剪切点),但在你的问题中找不到关于组时间变量的任何内容。