2011-03-15 77 views
4

假設我有與值的列和另一列中觀察到該值的次數的數據幀:如何輕鬆獲得R中每個值的計數值的均值,中位數,四分位數等?

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億(人類基因組的大小)。

回答

7

您是否嘗試過這些軟件包:

  1. Hmisc - 它有幾個加權統計,包括加權位數

  2. laeken - 它已經加權位數。

+0

Hmisc似乎有我需要的所有功能。謝謝。 –

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 
+0

我在問題中提到總數超過30億,這太大了。 –

+0

哎呀,我錯過了,對不起。 – aL3xa

0

爲了完整起見,我會注意到,S4Vectors包Bioconductor的的形式提供了一個答案在「RLE」類,它可以讓你構建一個支持所有常用操作的遊程編碼向量:

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) 
0

answer 通過完成, 這裏是完成加權中值的代碼,其中 的值爲 ,另一列爲觀察值的次數。 請注意,它使用Hmisc包中的wtd.quantile函數。

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 
相關問題