【发布时间】:2023-01-24 13:40:11
【问题描述】:
我正在使用 R 编程语言。
我有以下关于体重和哮喘患者的数据集(1 = 是,0 = 否):
library(dplyr)
library(purrr)
library(ggplot2)
set.seed(123)
my_data1 = data.frame(Weight = rnorm(500,100,100), asthma = sample(c(0,1), prob = c(0.7,0.3), replace=TRUE, size= 500))
my_data2 = data.frame(Weight = rnorm(500, 200, 50), asthma = sample(c(0,1), prob = c(0.3,0.7), replace=TRUE, size= 500))
my_data_a = rbind(my_data1, my_data2)
my_data_a$gender = "male"
my_data1 = data.frame(Weight = rnorm(500,100,100), asthma = sample(c(0,1), prob = c(0.7,0.3), replace=TRUE, size= 500))
my_data2 = data.frame(Weight = rnorm(500, 200, 50), asthma = sample(c(0,1), prob = c(0.3,0.7), replace=TRUE, size= 500))
my_data_b = rbind(my_data1, my_data2)
my_data_b$gender = "female"
my_data = rbind(my_data_a, my_data_b)
my_data$id = 1:2000
我的问题:对于两种性别,我想根据可用的体重范围(例如 min_weight_men : min_weight_men+ 30 = bin_1_men, min_weight_women : min_weight_women+ 30 = bin_1_women, min_weight_men+ 30 : min_weight_men+ 60 = bin_2_men, 等)按升序将此数据集中的人“分箱”到“n”箱(例如 n = 30) - 然后找出有多少每个垃圾箱中的人,以及每个垃圾箱的最小重量和最大重量。
我的尝试:我尝试使用以下代码执行此操作:
Part_1 = my_data %>% group_by(gender) %>%
mutate(bins = cut(Weight , breaks = pretty(Weight , n = (max(Weight)-min(Weight))/30), include.lowest = TRUE)) %>%
mutate(rank = dense_rank(bins)) %>%
mutate(new_bins = paste(rank,"_", gender, sep=""))
Part_2 = Part_1 %>% group_by(gender, bins) %>%
summarize(min_weight = min(Weight), max_weight = max(Weight), count = n())
Part_3 = merge(x=Part_1,y=Part_2, by.x=c("gender","bins"), by.y=c("gender","bins"))
虽然结果是我想要的格式 - 我不确定我是否正确执行了计算:
> head(Part_3)
gender bins Weight asthma id rank new_bins min_weight max_weight count
1 female (-100,-50] -75.13021 0 1192 4 4_female -99.91774 -51.53241 23
2 female (-100,-50] -55.78222 0 1382 4 4_female -99.91774 -51.53241 23
3 female (-100,-50] -51.53241 0 1232 4 4_female -99.91774 -51.53241 23
4 female (-100,-50] -71.44877 1 1484 4 4_female -99.91774 -51.53241 23
5 female (-100,-50] -93.99402 1 1160 4 4_female -99.91774 -51.53241 23
6 female (-100,-50] -96.49823 0 1378 4 4_female -99.91774 -51.53241 23
如果我做对了,有人可以帮我理解吗?
谢谢!
注意:澄清一下——假设男性的体重在 70 公斤到 150 公斤之间。我想要 bin_1_men = 70-100kg、bin_2_men = 100-130kg 等垃圾箱。我知道这可能会导致某些垃圾箱的计数明显不同。
【问题讨论】:
-
@ akrun:Max 和 Min 对应于男性体重的最大和最小值 - 以及女性的最大和最小体重值
-
在 Part_1 中,代码根据每个性别的总重量范围的总体最大/最小值计算男性和女性的 bin 宽度。在 Part_2 中,粘贴了每个 bin 的最大/最小值
-
感谢您的更正 - 我会立即添加!
-
@阿克伦;请参阅第 1 部分中的更新。这是你的意思吗?谢谢!
-
是的,我就是那个意思。谢谢
标签: r