통계

2012-09-08 2 views
2

나는 값이 가능하게 반복하여 0에서 1로 숫자를 취할 수통계

value(0 < v< 1), # of events 
--------------- ----------- 
0.1,    1000 
0.5,    20000 
0.7,    3000000 
0.1,    400000000 
0.5,    50000000000 
0.9,    6000000000000 
...,    ... 

처럼 보이는 테이블과 번호가 나는, 일부 기능, 예를 들어 plot()을 적용하려고이 테이블에, R은 같은 값으로 행을 식별하지 않지만 때 이벤트가

0.1,0,1,...0.1, 0.5,0.5,0.5, ... 

처럼,이 벡터의 일반적인 형태로이를 변환하는 비효율적 너무 커서 그들을 개별적으로 취급합니다. 우리가 다음 테이블을 가지고있는 것처럼이 종류의 테이블로 어떤 통계를 수행하는 좋은 방법은 무엇입니까?

value, # of events 
0.1, 400001000 
0.5, ... 

답변

1

첫 번째 단계는 첫 번째 표를 두 번째 형식으로 변환하는 방법입니다.

구성 데이터 :

library(reshape2) 
(dd3 <- melt(dd2,varnames="value",value.name="count")) 
## value  count 
## 1 0.1 4.000010e+08 
## 2 0.5 5.000002e+10 
## 3 0.7 3.000000e+06 
## 4 0.9 6.000000e+12 

:

dd <- setNames(as.data.frame(matrix(c(0.1,1000, 
             0.5,20000, 
             0.7,3000000, 
             0.1,400000000, 
             0.5,50000000000, 
             0.9,6000000000000), 
            ncol=2,byrow=TRUE)), 
          c("value","count")) 

사용 tapply 데이터

dd2 <- tapply(dd$count,dd$value,sum) 

을 응축 그런 다음 (아마도) 더 유용한 형식으로 데이터를 얻을 수 melt를 사용 매우 작고 큰 숫자를 추가 할 때는주의해야 할 수 있습니다.

"어떤 종류의 통계를해야합니까?" 질문의 일부 - 죄송합니다. 너무 모호합니다. 무엇을 찾으시겠습니까 ... ???

+0

죄송 사용 플롯합니다. R에서 데이터를 다루는 감각을 얻기 위해이 테이블에 평균값 또는 중앙값과 같은 기본 함수를 적용하는 방법을 궁금합니다. 이미 알아 챘으니 R을 처음 접했지만 가능한 한 빨리이 것을 배워야합니다.) – HBS

5

귀하의 질문에 약간의 불확실성이 있습니다. 그러나 나는 당신이 각 고유 값으로 이벤트를 합산하기를 원합니까? 그렇다면이 질문과 관련 질문에 대한 답이 많습니다. 하나의 접근법이 있습니다 :

#fake data 
set.seed(1) 
x <- data.frame(value = 1:3, events = sample(1:10, 9, TRUE)) 

#Option 1 

aggregate(events ~ ., data = x, FUN = "sum") 
    value events 
1  1  23 
2  2  14 
3  3  22 

#Option 2 
> tapply(x$events, x$value, FUN = "sum") 
1 2 3 
23 14 22 

#Option 3 
> library(plyr) 
> ddply(x, "value", summarize, sum = sum(events)) 
    value sum 
1  1 23 
2  2 14 
3  3 22 

#Option 4 
> library(data.table) 
> x <- data.table(x) 
> x[, sum(events), by = value] 
    value V1 
[1,]  1 23 
[2,]  2 14 
[3,]  3 22 

이러한 솔루션 (및 기타)은 데이터가 커짐에 따라 다른 방식으로 확장됩니다. 나는 타이밍과 방법 here

+0

다양한 옵션에 대한 답변 -이 기능이 실제로 도움이됩니다. 고마워요! – HBS

1

을 비교하는 꽤 comprensive 대답을했다 당신은 가중 평균하려는 경우 :

weighted.mean(dd$value, dd$count) 
[1] 0.8966414 

가중 평균을 (여러 다른 '가중'기능 Hmisc에있다)

library(Hmisc) 
wtd.quantile(dd$value, dd$count, .5) 
#50% 
#0.9 

는 모호한 것에 대한 barplot

barplot(dd$count) #perhaps with log="y" 
barplot(dd$count, log="y")