2016-11-22 1 views
0

В моих данных у меня есть 1000 измерений для каждой пространственной единицы и хотелось бы построить коэффициент вариации каждого из этих блоков. Я знаю, как рассчитать коэффициент вариации для всего набора данных, но как бы:Как автоматизировать поиск коэффициента вариации для нескольких категорий?

1) Создайте функцию, которая будет захватывать все имена категорий (уникальные значения в столбце).

2) Использование функции CV только те данные в каждой категории

3) Выходной результат таким образом, они могут быть нанесены в виде х = категории и у = CV

Ирис в качестве примера можно использовать набор данных. Позволяет сказать, что я хотел бы знать коэффициент вариации длины лепестков для каждого вида. Сам CV достаточно прост, но я потерял его.

data(iris) 
CV<-function(mean,sd){ 
    (sd/mean)*100 
} 
IrisCV<-CV(mean=mean(iris$Petal.Length), sd=sd(iris$Petal.Length)) 
IrisCV 

Любая помощь очень ценится!

ответ

1

Во-первых, вы должны изменить свою функцию:

CV <- function(x){ 
     (sd(x)/mean(x))*100 
} 

Затем вы можете использовать aggregate():

aggregate(Petal.Length ~ Species, 
      data = iris, 
      FUN = CV) 
#  Species Petal.Length 
#1  setosa 11.878522 
#2 versicolor 11.030774 
#3 virginica  9.940466 
+0

совершенное спасибо. Просто чтобы убедиться, что я понимаю: редактирование функции состояло в том, чтобы разрезать текст правильно? не обязательно, потому что в моем исходном коде была проблема с синтаксисом. – Jesse001

+1

Ваша начальная функция работает, но она неэффективна, потому что она точно не вычисляет 'CV', просто делит ваши два входа друг на друга' * 100'. Во-вторых, оба входа рассчитываются из одного и того же вектора, поэтому лучше упростить и переместить всю операцию внутри функции. Вы можете 'aggregate()' легко. – mtoto

Смежные вопросы