【问题标题】:Combine different apply functions in R在 R 中结合不同的应用函数
【发布时间】:2018-11-01 17:53:21
【问题描述】:

我真的很喜欢 R 中的 apply-family,但我认为我仍然没有充分利用它。

with(mtcars, tapply(mpg, cyl, mean))

sapply(mtcars, mean)

例如,这两个函数非常好,但是我怎样才能将它们结合起来以获得变量 cyl 的每个类别的每个变量的平均值?

使用 dplyr 我猜这很容易:

mtcars %>%
    group_by(cyl) %>%
    summarise_all(mean)

对于 dplyr,这似乎很容易。所以也许另一个问题可能是,当 dplyr 可以轻松解决问题时,为什么学习所有这些应用函数很有用? :-)

【问题讨论】:

  • 显然这是基于意见的,但我非常喜欢 purrr 包的接口,而不是 base-R 应用系列功能。 sapplymapplylapply的记忆方式各不相同,而map_*函数的界面一致,所以你只需要学习一种方式。

标签: r dplyr apply lapply tapply


【解决方案1】:

如果您正在寻找基本 R 解决方案,那么您可以使用split 将您的数据框用cyl 分隔,然后像以前一样使用sapply

S <- split( mtcars, mtcars$cyl )
lapply( S, function(x) sapply(x, mean) )

你的第二个问题主要是基于意见的,所以我会给出我的:tidyverse 包,如dplyr,构建在基本 R 功能之上,为常见的数据操作操作提供方便且一致的接口。出于这个原因,它通常是可取的,但在特定的开发环境中可能并不总是可用。在后一种情况下,了解如何使用基本 R 功能很有帮助。

【讨论】:

  • 谢谢,我完全忘记了拆分功能:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2018-12-12
  • 1970-01-01
相关资源
最近更新 更多