将X视为矩阵或data.frame。有没有像 申请(X,1,FUN) 而不是对X中的每一行应用FUN,得到一些形式 myApply(X,INDEX,FUN) 其中INDEX是因子或索引向量,因此对于INDEX中的每个唯一值IDX,应用FUN X [INDEX == IDX,] 并返回一些值?
由于
答案 0 :(得分:0)
这可以通过将数据框与split
分开并使用lapply
函数对每个子集进行操作来完成。让我们假设您想要计算虹膜数据集中每个物种的萼片长度与花瓣长度的最大比率。你可以这样做:
data(iris)
unlist(lapply(split(iris, iris$Species),
function(x) max(x$Sepal.Length / x$Petal.Length)))
# setosa versicolor virginica
# 4.833333 1.700000 1.352941
如果要为每个子集返回多个值,可以稍微修改一下方法:
do.call(rbind, lapply(split(iris, iris$Species),
function(x) data.frame(max.ratio = max(x$Sepal.Length / x$Petal.Length),
min.ratio = min(x$Sepal.Length / x$Petal.Length))))
# max.ratio min.ratio
# setosa 4.833333 2.526316
# versicolor 1.700000 1.176471
# virginica 1.352941 1.050000
这种方法称为split-apply-combine。