r语言 - 分组数据的中位数



我有一个数据集,其中包含每个妊娠周出生的婴儿数量。

我正试图根据该特定年份出生婴儿的频率确定分娩的中位胎龄

例如:

<表类>GAnum_infants_borntbody><<tr>20周1621周2222周3423周4524周6025周6726周94

如果我正确理解了你的问题,你会想要做这样的事情:

# Your gestational data:
gestational_data <- data.frame(GA_weeks = c(20:26),
num_infants_born = c(16,22,34,45,60,67,94))
# See the apply() documentation by running 
# ?apply
apply(gestational_data,
1,
function(x){
rep(x[1],x[2])
}) |>
unlist()|>
median()

你想要的是一个加权的中值。首先,您希望周数为数字,如果还不可用,可以使用gsub

dat$GA_num <- as.numeric(gsub('\D', '', dat$GA))

然后,使用matrixStats包中的weightedMedian,以婴儿数量为权重。

matrixStats::weightedMedian(dat$GA_num, w=dat$num_infants_born)
# [1] 24.34646

,加权均值有几种定义。要了解更全面的讨论,请看这个答案。


数据:

dat <- structure(list(GA = c("20 weeks", "21 weeks", "22 weeks", "23 weeks", 
"24 weeks", "25 weeks", "26 weeks"), num_infants_born = c(16L, 
22L, 34L, 45L, 60L, 67L, 94L)), class = "data.frame", row.names = c(NA, 
-7L))

最新更新