提问者:小点点

R dplyr:从外部查找表中总结每个_?


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

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

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

我想添加2列到'我的物种',其中每行包含Sepal的平均值。长度和萼片。只有那些在单独的查找表中可用的物种的宽度:虹膜数据集:唯一(虹膜$物种)

这个例子的输出应该是mySpecies数据框,带有额外的“seval”。长表示“和”萼片。宽度“平均值”列,包含iris$物种中出现的每个物种的变量平均值。

所以第一行只包含萼片。长度和萼片。“setosa”的宽度,因为其他物种名称没有出现在虹膜中。然而,第二行包含萼片的方式。长度和萼片。“virginica”和“setosa”的宽度,因为它们都出现在查找表中(即iris)。

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


共2个答案

匿名用户

干得好。首先,把你的绳子分成不同的种类;然后对每个组:过滤匹配的行,并计算平均值。

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

匿名用户

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