2014-01-23 4 views
0

(모든 조합에 대한) 여러 변수에 따라 데이터의 하위 집합에 대한 평균을 계산하는 것은 : 내가하고 싶은 무엇나는 다음과 같은 형태의 데이터 세트를

object.type condition date  replicate value 
object1  condition1 17/2/2014  1   5000 
object1  condition1 17/2/2014  2   6000 
object1  condition1 18/2/2014  1   5500 
object1  condition1 18/2/2014  2   6300 

object1  condition2 17/2/2014  1   5000 
object1  condition2 17/2/2014  2   6000 
object1  condition2 18/2/2014  1   5500 
object1  condition2 18/2/2014  2   6300 

object2  condition1 17/2/2014  1   5000 
object2  condition1 17/2/2014  2   6000 
object2  condition1 18/2/2014  1   5500 
object2  condition1 18/2/2014  2   6300 
etc. 

는의 부분 집합의 평균을 계산 특정 날짜에 특정 조건의 객체입니다. 예를 들어 object1의 경우 condition1에서 17 번째 경우 값은 mean(c(5000, 5500))이됩니다. 그래서 결국 나는이 같은 data.frame와 끝까지 :

object.type condition date   value 
object1  condition1 17/2/2014  5250 
object1  condition1 18/2/2014  6150 
object1  condition2 17/2/2014  5250 
object1  condition2 18/2/2014  6150 
object2  condition1 17/2/2014  5250 
etc. 

내가 모든 레벨을 통해 개체 유형, 조건의 모든 레벨을 통해 루프, 루프의 모든 단계를 통해이 중첩 루프를 사용하여 (루프를 할 수),하지만 R에 익숙하지 않으며 벡터화가 이러한 문제에 접근하는 가장 좋은 방법이라는 것을 알게되었습니다. 나는 그것에 대해 어떻게 생각하는지 모르겠습니다. 여기에 도움이 될만한 기능이 있습니까? 또는 반복적으로 (그리고 비효율적으로) 데이터 프레임을 확장해야하는 세 개의 중첩 된 for 루프를 사용하는 것 이외의 다른 방법이 있습니까?

+1

보세요. 집계 – Aashu

+1

제발 이해 좀 도와주세요. 상단에 샘플 데이터 세트, object1, condition1, date = 17/2/2014에 대한 평균값은 5000 및 6000 = 5250입니까? – jlhoward

+0

@jlhoward Ahh 내가 거기에서 위로 갈 것이다라는 것을 알고 있었다. 그러나 나는 누군가가 실제로 haha를 보는 것을 기대하지 않았다. 잘 보였다. – DashAnimal

답변

0
library(plyr) 
ddply(data,~ object.type + condition ,summarise,average=mean(value)) 

df에 plyr 패키지에서

+0

감사! 실제로 plyr 라이브러리를 사용하지는 않지만 올바른 경로에서 나를 [이 기사] (http://www.cookbook-r.com/Manipulating_data/Summarizing_data/)를 찾도록 설정하고 모든 대안을 이해하는 데 도움이되었습니다. 및 장점/단점이 있습니다. – DashAnimal

1

됩니다 aggregate(...)를 사용하고 데이터를 가정을 위 해보십시오 :

result <- aggregate(value ~ object.type + condition + date, df, mean) 
result 
# object.type condition  date value 
# 1  object1 condition1 17/2/2014 5500 
# 2  object2 condition1 17/2/2014 5500 
# 3  object1 condition2 17/2/2014 5500 
# 4  object1 condition1 18/2/2014 5900 
# 5  object2 condition1 18/2/2014 5900 
# 6  object1 condition2 18/2/2014 5900 

원래 순서 result 필요한 경우,

result <- with(result,result[order(object.type, condition, date),]) 
result 
# object.type condition  date value 
# 1  object1 condition1 17/2/2014 5500 
# 4  object1 condition1 18/2/2014 5900 
# 3  object1 condition2 17/2/2014 5500 
# 6  object1 condition2 18/2/2014 5900 
# 2  object2 condition1 17/2/2014 5500 
# 5  object2 condition1 18/2/2014 5900 
관련 문제