1

我想通过比 avg plus sd 更大的组来确定案例。例如,在 iris 数据中使用 species 作为组,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
4

1 回答 1

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

请注意,在您有联系的地方(如在此数据集中),您不会得到唯一的“更大”行。

于 2012-05-03T16:07:50.950 回答