首页 文章

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

提问于
浏览
1

如何使用 dplyr 解决以下玩具问题:

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

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

我'd like to add 2 columns to ' mySpecies'其中每行包含Sepal.Length和Sepal.Width的平均值,仅适用于单独查找表中可用的物种:iris数据集: unique(iris$Species)

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

所以第一行只包含'setosa'的Sepal.Length和Sepal.Width,因为其他物种名称没有出现在 iris 中 . 但是,第二行将包含Sepal.Length和Sepal.Width的均值'virginica'和'setosa',因为它们都出现在查找表中(即 iris ) .

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

2 回答

  • 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))
    

相关问题