我对 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
即使您从整数向量开始,当您将字符串写入整数向量时,整个向量也会转换为字符串。
参见:
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)