如何使用dplyr解决以下玩具问题:
取一个数据帧,其中每行包含至少两个由空格分隔的虹膜种类:
mySpecies <- data.frame(
Species=c("lazica uniflora setosa",
"virginica setosa uniflora loczyi",
"versicolor virginica"))
我想添加2列到'我的物种',其中每行包含Sepal的平均值。长度和萼片。只有那些在单独的查找表中可用的物种的宽度:虹膜数据集:唯一(虹膜$物种)
这个例子的输出应该是mySpecies数据框,带有额外的“seval”。长表示“和”萼片。宽度“平均值”列,包含iris$物种中出现的每个物种的变量平均值。
所以第一行只包含萼片。长度和萼片。“setosa”的宽度,因为其他物种名称没有出现在虹膜中。然而,第二行包含萼片的方式。长度和萼片。“virginica”和“setosa”的宽度,因为它们都出现在查找表中(即
iris
)。
请注意,这是一个玩具示例,但我的实际数据帧相当大。
干得好。首先,把你的绳子分成不同的种类;然后对每个组:过滤匹配的行,并计算平均值。
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))