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匹配。
答案 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
包含在数据框中,例如......