为什么我的“小于”和“大于”命令中不包含两位数?

问题描述 投票:0回答:1

我对 R 相当陌生,我正在将它用于我的论文。我尝试创建一组命令,将一系列数值重新编码为分类变量。我的数据集中可能值的范围为 1 - 13。出于某种原因,所有具有两位数的值都没有分组到我创建的因子级别中,我不知道为什么。

这是我创建分类组、将其转换为因子水平和输出的代码:

> Desc$Number.of.Chronic.conditions[Desc$Number.of.Chronic.conditions <=2] <- "≤2"
> Desc$Number.of.Chronic.conditions[Desc$Number.of.Chronic.conditions >=3 & Desc$Number.of.Chronic.conditions <5] <- "3 - 4"
> Desc$Number.of.Chronic.conditions[Desc$Number.of.Chronic.conditions >=5 & Desc$Number.of.Chronic.conditions <7] <- "5 - 6"
> Desc$Number.of.Chronic.conditions[Desc$Number.of.Chronic.conditions >=7 & Desc$Number.of.Chronic.conditions <9] <- "7 - 8"
> Desc$Number.of.Chronic.conditions[Desc$Number.of.Chronic.conditions >=9] <- "≥9"
> 
> Desc$Number.of.Chronic.conditions <- factor(Desc$Number.of.Chronic.conditions)

> print(Desc$Number.of.Chronic.conditions)
[1] 5 - 6 7 - 8 ≤2    5 - 6 5 - 6 3 - 4 7 - 8 ≤2    7 - 8 3 - 4 5 - 6 ≤2    5 - 6 ≥9    ≤2    5 - 6 5 - 6 7 - 8 10   
[20] 7 - 8 11    7 - 8 5 - 6 ≤2    3 - 4 5 - 6 ≥9    5 - 6 7 - 8 3 - 4 3 - 4 5 - 6 ≤2    ≤2    5 - 6 3 - 4 7 - 8 3 - 4
[39] ≤2    7 - 8 5 - 6 7 - 8 7 - 8 5 - 6 10    ≤2    ≤2    ≤2    ≤2    3 - 4 3 - 4 ≤2    ≤2    ≤2    7 - 8 ≤2    ≤2   
[58] 7 - 8 ≤2    3 - 4 3 - 4 ≤2    13    3 - 4 3 - 4 3 - 4 7 - 8 5 - 6 3 - 4 5 - 6 3 - 4 5 - 6 5 - 6 5 - 6 3 - 4 3 - 4
[77] 5 - 6 ≥9    ≤2    ≤2    10    3 - 4 7 - 8 11    7 - 8 5 - 6 3 - 4 3 - 4 ≥9    3 - 4 3 - 4 5 - 6 3 - 4 7 - 8 5 - 6
[96] 5 - 6 3 - 4 12    10    ≤2    5 - 6 5 - 6 3 - 4 3 - 4 3 - 4 5 - 6 5 - 6 3 - 4 5 - 6 ≤2    5 - 6 3 - 4 5 - 6 3 - 4
[115] 3 - 4 ≤2    5 - 6 7 - 8 3 - 4 ≤2    3 - 4 7 - 8 5 - 6 7 - 8 5 - 6 ≤2    7 - 8 ≤2    ≤2    ≥9    7 - 8 ≥9    3 - 4
[134] 5 - 6 ≤2    5 - 6 3 - 4 ≤2    3 - 4 3 - 4 ≤2    5 - 6 3 - 4 ≤2    7 - 8 3 - 4 ≤2    ≤2    3 - 4 3 - 4 ≤2    10   
[153] 3 - 4 5 - 6 5 - 6 5 - 6 5 - 6 3 - 4 5 - 6 5 - 6 5 - 6 7 - 8 5 - 6 5 - 6 5 - 6 10    5 - 6 3 - 4 3 - 4 ≤2    3 - 4
[172] ≤2    7 - 8 ≤2    ≤2    7 - 8 ≤2    7 - 8 10    5 - 6 ≥9    3 - 4 3 - 4
Levels: ≤2 ≥9 10 11 12 13 3 - 4 5 - 6 7 - 8

> summary(Desc$Number.of.Chronic.conditions)
   ≤2    ≥9    10    11    12    13 3 - 4 5 - 6 7 - 8 
   40     7     7     2     1     1    49    49    27 
r categorical-data
1个回答
0
投票

即使您从整数向量开始,当您将字符串写入整数向量时,整个向量也会转换为字符串。

参见:

Desc<-data.frame(Number.of.Chronic.conditions=c(1:15))

str(Desc)  ## str shows the structure of an object
'data.frame':   15 obs. of  1 variable:
 $ Number.of.Chronic.conditions: int  1 2 3 4 5 6 7 8 9 10 ... 

Desc$Number.of.Chronic.conditions[Desc$Number.of.Chronic.conditions <=2] <- "≤2"

str(Desc)
'data.frame':   15 obs. of  1 variable:
 $ Number.of.Chronic.conditions: chr  "≤2" "≤2" "3" "4" ...

整数 >= 的规则与字符串不同。 “9”和9都>= 9;然而“10”不 >= 9。

至少有两种方法可以解决这个问题,使用像

dplyr
库的
mutate(case_when(...)))
这样的函数一步执行所有分箱,或者将分箱因子推入其自己的列中:

Desc<-data.frame(Number.of.Chronic.conditions=c(1:15))

Desc$Factor.of.Chronic.conditions[Desc$Number.of.Chronic.conditions <=2] <- "≤2"
Desc$Factor.of.Chronic.conditions[Desc$Number.of.Chronic.conditions >=3 & Desc$Number.of.Chronic.conditions <5] <- "3 - 4"
Desc$Factor.of.Chronic.conditions[Desc$Number.of.Chronic.conditions >=5 & Desc$Number.of.Chronic.conditions <7] <- "5 - 6"
Desc$Factor.of.Chronic.conditions[Desc$Number.of.Chronic.conditions >=7 & Desc$Number.of.Chronic.conditions <9] <- "7 - 8"
Desc$Factor.of.Chronic.conditions[Desc$Number.of.Chronic.conditions >=9] <- "≥9"

Desc$Factor.of.Chronic.conditions <- factor(Desc$Factor.of.Chronic.conditions)

table(Desc$Factor.of.Chronic.conditions)
© www.soinside.com 2019 - 2024. All rights reserved.