2012-03-21 4 views
0

입니다. 몇 가지 통계를 계산하고자하는 데이터가 있습니다. 데이터는 I가 값 여기서그룹 별 평균 계산량은 R

(P1,M1,R1,V1) 
(P1,M1,R2,V2) 
(P1,M2,R1,V1) 
... 

P1 같이 각각 3 소자 튜플 무언가에 대응해야하는 방식으로 구성되어, M1 및 R1 숫자 아니지만 V1 및 V2이다. 는 지금은, csv 파일의 데이터를 x2.cvs 다음과 같이

P,M,R,V 
P1,M1,R1,V1 
P1,M1,R2,V2 
... 

내가
d = read.table("x2.csv", sep=",", header=TRUE) 

를 사용하여 데이터를 읽을 수 있지만 그 후 내가 처리하기 위해 무엇을 해야할지하지 않습니다 자료.

I 같은 간단한 정보를 계산함으로써 시작하려는 : P의 각 요소에 대한 평균 (그래서 보통 M 및 R의 모든 요소 위에 것) {P, 또는 요소들의 각 쌍에 대한 무엇 을 , M}이 (그래서 여기에 평균 내가 P1의 많은 요소가 일부 지정된 값보다 더 큰 어떻게 계산처럼 조금 더 복잡한 일을하고 싶습니다 R.

다음의 요소를 될 것입니다.

+0

기본 기능을 사용해보십시오. 그것은 당신에게 정말 기본적인 정보를 제공합니다. 그 중에서도 ... – Oz123

+1

R 튜토리얼을 찾으십시오. 왜냐하면이 튜토리얼은 정말 기본적인 것들이기 때문에 여기서는 큰 답이 아닙니다. – Oz123

+1

'tapply'와'table'을보세요. –

답변

6

data.table, plyr 및 기본 기능이 여기에 있습니다. 다른 많은 방법이 있습니다.

,363,210

첫째, 일부 예시적인 데이터 ...

dput(examp) 
structure(list(P = structure(c(1L, 1L, 1L, 2L), .Label = c("P1", 
"P2"), class = "factor"), M = structure(c(1L, 1L, 2L, 2L), .Label = c("M1", 
"M2"), class = "factor"), R = structure(c(1L, 2L, 1L, 1L), .Label = c("R1", 
"R2"), class = "factor"), V = c(23, 49, 24, 29)), .Names = c("P", 
"M", "R", "V"), row.names = c(NA, -4L), class = "data.frame") 
# 
# to give something like what you have... 
# 
examp 
    P M R V 
1 P1 M1 R1 23 
2 P1 M1 R2 49 
3 P1 M2 R1 24 
4 P2 M2 R1 29 

여기 data.table를 사용하여 하나의 방법이다. http://datatable.r-forge.r-project.org/datatable-intro.pdf

# What is the average of each element of P? 
library(data.table) 
examp.dt <- data.table(examp) 
setkey(examp.dt,P) 
examp.dt[,mean(V),by=P] 
     P V1 
[1,] P1 32 
[2,] P2 29 
# 

그리고 다른 plyr

# What is the average of each element of P? 
library(plyr) 
ddply(examp, "P", function(df)mean(df$V)) 
P V1 
1 P1 32 
2 P2 29 

를 사용하여 다른 사용하여 기본 R

: 데이터 오브젝트가 매우 큰 경우, 당신은 매우 빨리하기 위해 data.table 패키지를 찾을 수 있습니다, 문서도 우수
# What is the average of each element of P? 
# for example using the by() function, tapply() would be similar 
with(examp, by(examp, P, mean)) 
P: P1 
P M R V 
NA NA NA 32 
------------------------------------------------- 
P: P2 
P M R V 
NA NA NA 29 
# 
# What is the average of each element of R? 
with(examp, by(examp, R, mean)) 
R: R1 
P  M  R  V 
NA  NA  NA 25.33333 
---------------------------------------------- 
R: R2 
P M R V 
NA NA NA 49 
# 
# the same, using tapply 
with(examp, tapply(V, R, mean) 
    R1  R2 
25.33333 49.00000 

마지막 질문에 P1의 몇 요소가 지정된 값보다 몇 배입니까?를 사용할 수 있습니다. 6,001,823,210과 같이 : 심지어

# how many elements of P1 are greater than 20? 
nrow(subset(examp, examp$P=="P1" & examp$V>20)) 
[1] 3 

또는 적은 입력과 같은 결과 단지 [을 :

nrow(examp[examp$P=="P1" & examp$V>20,]) 
[1] 3 
5

aggregate 기능은 아마 사용하기 쉬운 것입니다 무엇을 요구하고있다 :

1) P의 각 요소에 대한 평균은 얼마입니까?

aggregate(formula = V ~ P, data = d, FUN = mean) 

2) 또는 {P, M} 요소들의 각 쌍에 대한 ?P1의

aggregate(formula = V ~ M + R, data = d, FUN = mean) 

3) 얼마나 많은 요소는 어떤 특정 값보다 큰?

aggregate(formula = V ~ P, data = d, FUN = function(x)sum(x > 10))