假设我有一个数据框,其中包含值列和另一列,表示观察到该值的次数:
x <- data.frame(value=c(1,2,3), count=c(4,2,1))
x
# value count
# 1 1 4
# 2 2 2
# 3 3 1
我知道我可以使用weighted.mean
获取数据的加权平均值,使用多个包提供的weighted.median
函数加权中位数(例如limma
),但我怎么能获得我的数据的其他加权统计数据,例如第一和第三四分位数,以及标准差?使用rep
“扩展”数据不是一种选择,因为sum(x$count)
约为30亿(人类基因组的大小)。
答案 0 :(得分:7)
你试过这些包吗?
Hmisc
- 它有多个加权统计信息,包括加权分位数
laeken
- 它有加权分位数。
答案 1 :(得分:1)
或尝试对其进行反向转换,并按常规方式运行分析:
dtf <- data.frame(value = 1:3, count = c(4, 2, 1))
x <- with(dtf, rep(value, count))
summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 1.000 1.000 1.571 2.000 3.000
fivenum(x)
[1] 1 1 1 2 3
答案 2 :(得分:0)
为了完整起见,我会注意到Bioconductor中的S4Vectors包提供了一个答案,其形式为&#34; Rle&#34; class,它允许您构造一个支持所有常规操作的行程编码向量:
library(S4Vectors)
x <- data.frame(value=c(1,2,3), count=c(4,2,1))
y <- Rle(x$value, x$count)
mean(y)
median(y)
quantile(y)
答案 3 :(得分:0)
完成answer
按Prasad Chalasani,
这是完成给定加权中位数的代码
值列
以及观察到该值的次数的另一列。
请注意,它使用wtd.quantile
包中的Hmisc
函数。
require(Hmisc)
x <- data.frame(value=c(1,2,3), count=c(4,2,1))
## value count
## 1 1 4
## 2 2 2
## 3 3 1
wtd.quantile(x$value, x$count, probs = 0.5)
## 50%
## 1