2016-09-28 8 views
1

Я не могу найти набор данных, подобный моей проблеме, поэтому я изменил набор данных Iris (набор данных в R), чтобы выглядеть похожим - это достаточно близко!Вложение SUM и MEAN в совокупности для получения средств баллов для каждой группы

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

Затем я использовал следующий код

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

, что приводит к

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 

Я понимаю, что то, что мой код делает это добавление вместе Sepal.Length для каждого ID затем принимая среднее значение этих значений по видам и типу.

Это правильно?

Если нет, как я могу это получить?

Кроме того, как бы получить это, если мои данные таковы, что каждый идентификатор имеет несколько типов? (Не могу понять, как построить это в R)

На самом деле, просто чтобы быть совершенно ясно

То, что я хочу, это код, который суммирует вместе Sepal.Length для каждого идентификатора и типа, то он будет принимать среднее из этих сумм по всем идентификаторам и после средней Sepal.Length по типу и виду/

ответ

1

с data.table:

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.table «s dcast Метод:

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