R 循环,以便提取数据,然后计算平均值

R 循环,以便提取数据,然后计算平均值,r,R,我一直在试图计算数据(iris)的“萼片长度”、“萼片宽度”、“花瓣长度”和“花瓣宽度”的平均值,按因子“物种” 我知道我们可以很容易地用aggregate()或apply()族来实现这一点,但我正试图通过编写一个函数来实现这一点,该函数可能也可以实现同样的功能 我一直想做的是: (1) 创建按“种类”划分的子集 (2) 计算子集每列的平均值 (3) 合二为一 new_iris <- function(df) { # Enter code here species = level

我一直在试图计算
数据(iris)
的“萼片长度”、“萼片宽度”、“花瓣长度”和“花瓣宽度”的平均值,按因子
“物种”

我知道我们可以很容易地用
aggregate()
apply()
族来实现这一点,但我正试图通过编写一个函数来实现这一点,该函数可能也可以实现同样的功能

我一直想做的是: (1) 创建按“种类”划分的子集 (2) 计算子集每列的平均值 (3) 合二为一

new_iris <- function(df) {

  # Enter code here
  species = levels(df$Species)

  for (i in 1:length(species)) {
  subdata = subset(df, Species == species[i])
  means = colMeans(subdata[1:4])
}
 data.frame(species,means)
  }

new\u iris我认为你所做的是某种形式的教育练习;因此,我不会在这里评论其他/更好的方法

您的代码存在一些问题,因此这里有一个改进的版本

new_iris <- function(df) {

  # Enter code here
  species = levels(df$Species)

  data.frame(
      species,
      do.call(rbind, lapply(species, function(x)
          colMeans(df[df$Species == x, ][1:4]))))
}


new_iris(iris)
#species Sepal.Length Sepal.Width Petal.Length Petal.Width
#1     setosa        5.006       3.428        1.462       0.246
#2 versicolor        5.936       2.770        4.260       1.326
#3  virginica        6.588       2.974        5.552       2.026
新虹膜