从 R 中的分组频率导出中值
Deriving median from grouped frequencies in R
我有以下示例 table,我需要在其中找到一群动物的平均年龄。它不仅有一个 0
,它还有一个给定年龄的动物分组频率。
library(tidyverse)
a<-data.frame(Age=c(0,1,2,3,4,5,6,7,8,9),
Individuals=c(3655,2535,898,235,559,265,258,3659,7895,3655))
a%>%summarise(Age=as.numeric(Age),
Median=sort(as.numeric(Age)*Persons/sum(Individuals)))
我了解标准 median()
选项不起作用。我自作聪明尝试了类似:median(rep(a$Age, a$Individuals))
,但是内存消耗太大了。此外,我认为它会因更大的数据集而失败。
您可以uncount
原始数据框,然后使用标准median
函数。
a %>% uncount(Individuals) %>% summarise(Median=median(Age))
Median
1 7
并检查:
> sum(a$Individuals)/2
[1] 11807
> sum(a$Individuals[1:7])
[1] 8405
> sum(a$Individuals[1:8])
[1] 12064
一切顺利。
你可能有点聪明,可以这样做:
a %>%
arrange(Age) %>%
summarise(median = Age[findInterval(sum(Individuals)/2, cumsum(Individuals)) + 1])
median
1 7
我有以下示例 table,我需要在其中找到一群动物的平均年龄。它不仅有一个 0
,它还有一个给定年龄的动物分组频率。
library(tidyverse)
a<-data.frame(Age=c(0,1,2,3,4,5,6,7,8,9),
Individuals=c(3655,2535,898,235,559,265,258,3659,7895,3655))
a%>%summarise(Age=as.numeric(Age),
Median=sort(as.numeric(Age)*Persons/sum(Individuals)))
我了解标准 median()
选项不起作用。我自作聪明尝试了类似:median(rep(a$Age, a$Individuals))
,但是内存消耗太大了。此外,我认为它会因更大的数据集而失败。
您可以uncount
原始数据框,然后使用标准median
函数。
a %>% uncount(Individuals) %>% summarise(Median=median(Age))
Median
1 7
并检查:
> sum(a$Individuals)/2
[1] 11807
> sum(a$Individuals[1:7])
[1] 8405
> sum(a$Individuals[1:8])
[1] 12064
一切顺利。
你可能有点聪明,可以这样做:
a %>%
arrange(Age) %>%
summarise(median = Age[findInterval(sum(Individuals)/2, cumsum(Individuals)) + 1])
median
1 7