我想通过比avg加sd更大的组来识别案例。例如,在虹膜数据中使用物种作为组和petal.wid作为我的变量。
什么是更好的方法?创建一个函数?
我做了这个,但是我无法与原始数据建立关系以确定案例。
data(iris)
library(plyr)
petal.wid.avg <- ddply(iris, .(Species), function(df)
return(c(petal.wid.avg=mean(df$Petal.Width), petal.wid.sd=sd(df$Petal.Width)))
)
petal.wid.avg$avgsd <- petal.wid.avg$petal.wid.avg + petal.wid.avg$petal.wid.sd
petal.wid.avg
答案 0 :(得分:4)
有很多方法可以做到这一点,但ave
函数可能是最简单的。
iris$big <- with(iris,
ave(Petal.Width, Species, FUN = function(x) x > mean(x) + sd(x))
)
以下是plyr
解决方案:
iris <- ddply(
datasets::iris,
.(Species),
transform,
big = Petal.Width > mean(Petal.Width) + sd(Petal.Width)
)
根据评论,这是解决方案的其余部分。
iris <- subset(iris, big)
iris <- ddply(
iris,
.(Species),
transform,
smallest = Petal.Width == min(Petal.Width)
)
(iris <- subset(iris, smallest))
请注意,如果您有关系(如此数据集中),您将无法获得唯一的“更大”行。