2016-09-28 3 views
1

내 문제와 비슷한 데이터 세트를 찾을 수 없으므로 유사하게 보이도록 아이리스 (R의 데이터 세트)를 변경했습니다. 합계에서 SUM과 평균을 중첩하여 그룹 당 평균 점수를 얻습니다.

data = iris 
data$type = gl(5,30,150,labels=c("group1","group2","group3","group4","group5")) 
data$ID = gl(30,5,150) 

은 그 때 나는

type 
Species  group1 group2 group3 group4 group5 
    setosa  30.16 19.90 0.00 0.00 0.00 
    versicolor 0.00 12.20 35.88 11.28 0.00 
    virginica 0.00 0.00 0.00 26.24 39.64 

나의 이해 결과 다음 코드

xtabs(Sepal.Length ~ Species + type, aggregate(Sepal.Length ~ Species + type + ID, data, mean)) 

입니다 무엇을 사용 내 코드는 각각의 ID 함께 Sepal.Length을 추가하고있는 다음 복용하는 종 (Species)과 유형 (Type)별로 그 값의 평균.

이 정보가 맞습니까?

그렇지 않은 경우 어떻게해야합니까?

또한 각 ID에 여러 유형이있는 데이터가있는 경우 어떻게됩니까? 단지 내가 원하는 것은 각 ID에 대해 함께 Sepal.Length을 요약 한 코드입니다

완벽하게 명확하고,이 걸릴를 입력 한 다음, 실제로

을 (R이를 구성하는 방법을 알아낼 수 없습니다) 모든 ID를 통해 그 금액의 평균은 data.table으로/유형 및 종에 의해

답변

1

을 평균 Sepal.Length를 게시 :

library(data.table) 
setDT(data) 

#sum of Sepal.Length for each ID AND type 
data[, id_type_sum := sum(Sepal.Length), by = .(ID, type)] 

# mean of this variable by type and species 
data[, mean(id_type_sum), by = .(type, Species)] 

# type Species  V1 
# 1: group1  setosa 25.13333 
# 2: group2  setosa 24.87500 
# 3: group2 versicolor 30.50000 
# 4: group3 versicolor 29.90000 
# 5: group4 versicolor 28.20000 
# 6: group4 virginica 32.80000 
# 7: group5 virginica 33.03333 

을 그리고 당신은 테이블 형식이 원하는 경우, 당신은 사용할 수 있습니다 data.tabledcast 방법 :

library(magrittr) # for the %>% operator 
data[, mean(id_type_sum), by = .(type, Species)] %>% 
    dcast(Species ~ type) 

결과 :

 Species group1 group2 group3 group4 group5 
1:  setosa 25.13333 24.875  NA  NA  NA 
2: versicolor  NA 30.500 29.9 28.2  NA 
3: virginica  NA  NA  NA 32.8 33.03333 
+1

가 내 실제 데이터에이 코드를 사용하고 숫자가 내가 예상처럼! 이게 정말 고마워. –

+0

천만에! 'data.table'은 훌륭한 패키지입니다. – arvi1000

관련 문제