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
新虹膜