R:如何将函数应用于数据帧中的块并返回转换后的块?

时间:2014-04-10 13:59:24

标签: r

将X视为矩阵或data.frame。有没有像     申请(X,1,FUN) 而不是对X中的每一行应用FUN,得到一些形式     myApply(X,INDEX,FUN) 其中INDEX是因子或索引向量,因此对于INDEX中的每个唯一值IDX,应用FUN     X [INDEX == IDX,] 并返回一些值?

由于

1 个答案:

答案 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。