将数字和分类变量分类到R中的适当范围

时间:2016-04-01 14:01:02

标签: r variables categorical-data

 Df <- bball5
 str(bball5)
 'data.frame':  379 obs. of 9 variables:
 $ ID         : int  238 239 240 241 242 243 244 245 246 247 ...
 $ Sex        : Factor w/ 2 levels "female","male": 1 1 1 1 1 1 1 1 1 1 ...
 $ Sport      : Factor w/ 10 levels "BBall","Field",..: 1 1 1 1 1 1 1 1 1 1 
 $ Ht         : num  196 190 178 185 185 ...
 $ Wt         : num  78.9 74.4 69.1 74.9 64.6 63.7 75.2 62.3 66.5 62.9 ...
 $ BMI        : num  20.6 20.7 21.9 21.9 19 ...
 $ BMIc       : NA NA NA NA NA NA NA NA NA NA ...
 $ Sex_f      : Factor w/ 1 level "female": 1 1 1 1 1 1 1 1 1 1 ...
 $ Sex_m      : Factor w/ 1 level "male": NA NA NA NA NA NA NA NA NA NA ...

我想在一个1000的大型数据集中对一组数值变量进行分类。

我需要将BMI分类为以下范围:

    (<18.50, 18.50-24.99, 24.99-25.00, >=30.00) 

并将它们分别标记为:

  "Underweight" "Normal" "Overweight" "Obese" 

以便绘制表格以展示单独的关系:
     $ males      $女性
根据运动类型。

我还需要确认计算出的BMI是否正确完成,因为我发现很难在数据集中为新变量列创建公式

$ BMIc.

每个变量中的变量(NA)中有几个缺失值,如果我创建一个函数来计算新变量,则会给出错误

 bball5$BMIc <- bball5$BMI[bball5$BMI, c(bball5$wt/(bball5$Ht)^2 ]

我无法对BMI变量进行分类。 我必须保持ID匹配。

2 个答案:

答案 0 :(得分:0)

您可以创建名为BMIclass的变量,并执行此操作以在其中创建4个类别:

bball5$BMIclass <- "Underweight"
bball5[which(bball5$BMI>18.5 & ball5$BMI<24.99), 'BMIclass'] <- "Normal"
bball5[which(bball5$BMI>=24.99 & ball5$BMI<25), 'BMIclass'] <- "Overweight"
bball5[which(bball5$BMI>=30), 'BMIclass'] <- "Obese"
bball5$BMIclass <- as.factor(bball5$BMIc)

至于BMIc你可以这样做(见下文)。它仍然会创建一些缺少值的NA,但它会为您提供正确的BMIc,其中有数据。

bball5$BMIc <- bball5$wt/bball5$Ht^2

答案 1 :(得分:0)

我会使用cut将BMI转换为分类变量。随机BMI向量的一个例子:

BMI <- runif(100, 16, 35)
BMIc <- cut(BMI, breaks=c(0, 18.5, 25, 30, +Inf), 
            labels=c("Underweight", "Normal", "Overweight", "Obese"))

要检查结果,您可以使用aggregate

aggregate(BMI, by=list(BMIc), summary)

最后,新的向量可以使用命令df$BMIc <- BMIc包含在数据框中,例如......