2016-03-12 4 views
1

Как бы один решить следующую проблему игрушку с помощью dplyr:R dplyr: summaryise_each из внешней таблицы поиска?

Возьмите кадр данных, где каждая строка содержит, по меньшей мере, два ирис видов, разделенных пробелами:

mySpecies <- data.frame(
    Species=c("lazica uniflora setosa", 
     "virginica setosa uniflora loczyi", 
     "versicolor virginica")) 

Я хотел бы добавить 2 столбцы «mySpecies», где каждая строка содержит среднее значение Sepal.Length и Sepal.Width только для тех видов, имеющихся в отдельной таблице поиска: диафрагма набора данных: unique(iris$Species)

выходной сигнал этого примера следует кадр данных mySpecies остроумие h дополнительные столбцы «Sepal.Length.mean» и «Sepal.Width.mean», содержащие среднее значение этих переменных для каждого вида, которые появляются в диафрагме $ Species.

Итак, первая строка будет содержать Sepal.Length и Sepal.Width для 'setosa', потому что другие имена видов не отображаются в iris. Вторая строка, однако, будет содержать средства Sepal.Length и Sepal.Width в 'virginica' и 'setosa', потому что они оба появляются в таблице поиска (то есть iris).

Обратите внимание, что это пример игрушки, но мои фактические данные очень большие.

+0

Итак, какой желаемый результат для вашего примера? – lukeA

+0

Непонятно, как вы хотите вывести – akrun

+0

Вы имели в виду 'iris%>% group_by (Species)%>% summaryise_each (funs (mean), Sepal.Length: Sepal.Width)%>% bind_cols (., MySpecies) ' – akrun

ответ

0

Здесь вы идете. Сначала разделите свою строку на отдельные виды; затем для каждой группы: фильтровать строки, которые соответствуют, и вычислять среднее значение.

mySpecies %>% 
    group_by(Species) %>% 
    do({ 
     spec <- strsplit(as.character(.$Species), " ", fixed=TRUE)[[1]] 
     filter(iris, Species %in% spec) %>% 
      summarise_each(funs(mean), Sepal.Length, Sepal.Width) 
    }) 
0
library(dplyr) 

mySpecies= c("setosa", "loczyi", "virginica") 

filter(iris, Species %in% mySpecies) %>% 
    group_by(iris, Species) %>% 
    summarise(mean_width = mean(Sepal.Width), 
       mean_length = mean(Sepal.Length)) 
Смежные вопросы