R은 :

2011-08-25 3 views
4

제가 분산을 계산하고 싶은 데이터 프레임 각각 별개 V2 값이R은 :

V1 V2 
.. 1 
.. 2 
.. 1 
.. 3 

처럼 보이는이 데이터 $ V2의 각각의 상이한 값에 대해 데이터 $ V1에 대한 분산을 계산 V1에있는 데이터의 나는 방금 R로 나의 모험을 시작했다, 어떤 힌트 이것을하는 방법? 내 특정 사건에 대한 그러나 나는 내가 더 일반적인 솔루션 어떨지 궁금, 내가 모든 가능한 V2 값을 (많은이되지 않습니다) 알고 있기 때문에 내가

var1 = var(data[data$V2==1, "V1"]) 
var2 = ... 

같은 수동 일 등을 할 수있는 것 같아요. 어떤 아이디어?

답변

3
library(reshape) 
ddply(data, .(V2), summarise, variance=var(V1)) 
+0

는 plyr 패키지에 ddply 아닌가? 나는 좀 더 ddply로 놀 필요가있다. .variable 명명 규칙에 대해 직관적이지 않은 내용이 있으며 요약 사용은 너무 자의적 인 것처럼 보입니다. – nzcoops

+0

입니다. Plyr은 재구성에 필요한 패키지입니다. 두 함수를 모두 사용하기 때문에 일반적으로 모양을 가져옵니다. – wespiserA

+0

아, 의미가 있습니다. – nzcoops

3

이 작업을 수행 할 수있는 몇 가지 방법이있다, 내가 선호 :

dat <- data.frame(V1 = rnorm(50), V2=rep(1:5,10)) 
dat 

aggregate (V1~V2, data=dat, var) # The first argument tells it to group V1 based on the values in V2, the last argument simply tells it the function to apply. 

> aggregate (V1~V2, data=dat, var) 
    V2  V1 
1 1 0.9139360 
2 2 1.6222236 
3 3 1.2429743 
4 4 1.1889356 
5 5 0.7000294 

는 또한 plyr 패키지에 daply 등 ddply로 본다.

+0

감사합니다. 매우 도움이되었습니다. 나는 8 분 안에이 대답을 받아 들일 것이다. – mkk

+0

실제로 나는 당신의 예제를 붙여 넣을 때 에러가 난다. (as.character (FUN), mode = "function", envir = envir) 에러 : object 모드 'function'의 'FUN'을 찾을 수 없습니다. – mkk

+0

두 번째 것. 나는 최신 버전 2.13.1 (Windows 7)을 가지고있다. 어쩌면 일부 패키지를로드하지 않았기 때문일 수 있습니까? 어쨌든 나는 그것을 ddply를 통해 작동하도록 만들었습니다.wespiserA 코드를 복사하여 붙여 넣었습니다.이 코드는 수정하지 않은 채로 작동 했으므로 대신 대답을 수락합니다. FUN = var를 추가하는 것과 같은 간단한 방법을 시도했지만 여전히 작동하지 않으려했습니다. – mkk

7

data.table을 사용하는 다른 해결책. 훨씬 빠르며, 대용량 데이터 세트를 가지고있을 때 특히 유용합니다.

require(data.table) 
dat2 = data.table(dat) 
ans = dat2[,list(variance = var(V1)),'V2'] 
+0

+1 for data.table – Andrie

9

그리고 기존의 대기, tapply :

dat <- data.frame(x = runif(50), y = rep(letters[1:5],each = 10)) 
tapply(dat$x,dat$y,FUN = var) 

     a   b   c   d   e 
0.03907351 0.10197081 0.08036828 0.03075195 0.08289562 
+1

그 두 번째. . . 함수의'* apply' 패밀리는 Stack Overflow에 대한 대답에서 매우 강력하고 과소 대표됩니다. – adamleerich

관련 문제