R dplyr:来自外部查找表的summarise_each?

时间:2016-03-12 17:40:18

标签: r dplyr

如何使用mySpecies <- data.frame( Species=c("lazica uniflora setosa", "virginica setosa uniflora loczyi", "versicolor virginica")) 解决以下玩具问题:

取一个数据框,其中每行包含至少两个用空格分隔的虹膜种类:

unique(iris$Species)

我想在“mySpecies&#39;”中添加2列。其中每一行包含Sepal.Length和Sepal.Width的平均值 仅适用于单独查找表中可用的物种:虹膜数据集:iris

此示例的输出应该是mySpecies数据框,其中包含额外的&#39; Sepal.Length.mean&#39;和&#39; Sepal.Width.mean&#39;列包含虹膜$ Species中出现的每个物种的变量的平均值。

所以第一行只包含Sepal.Length和Sepal.Width,因为其他物种名称不会出现在iris中。然而,第二行将包含Sepal.Length和Sepal.Width在&virginica&#39;的范围内。和&#39; setosa&#39;,因为它们都出现在查找表中(即from django import forms from .models import Contact from django.db import models class ContactForm(forms.ModelForm): class Meta: model = Contact fields = [ 'name', 'email', 'message', ] def __init__(self, *args, **kwargs): super(ContactForm, self).__init__(*args, **kwargs) self.fields['name'].widget = forms.TextInput(attrs={ 'placeholder': 'Name', 'required': True}) self.fields['email'].widget = forms.TextInput(attrs={ 'placeholder': 'Email', 'required': True}) self.fields['message'].widget = forms.Textarea(attrs={ 'placeholder': 'Message', 'rows': 6, 'required': True}) )。

请注意,这是一个玩具示例,但我的实际数据帧非常大。

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分: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)
    })