在 R 中组合不同的应用函数
Combine different apply functions in R
我真的很喜欢 R 中的应用系列,但我认为我仍然没有充分利用它。
with(mtcars, tapply(mpg, cyl, mean))
sapply(mtcars, mean)
例如,这两个函数非常好,但是我如何将它们组合起来以获得变量 cyl 的每个类别的每个变量的平均值?
我猜使用 dplyr 很容易:
mtcars %>%
group_by(cyl) %>%
summarise_all(mean)
对于dplyr来说似乎很容易。因此,也许另一个问题可能是,当 dplyr 使解决问题变得容易时,为什么甚至学习所有这些应用函数也是有用的? :-)
如果您正在寻找基本的 R 解决方案,那么您可以使用 split
通过 cyl
分隔数据框,然后像以前一样使用 sapply
:
S <- split( mtcars, mtcars$cyl )
lapply( S, function(x) sapply(x, mean) )
你的第二个问题主要是基于意见,所以我会给出我的:tidyverse
包,如 dplyr
,建立在基础 R 功能之上,为通用提供方便和一致的界面数据操纵操作。出于这个原因,它通常是可取的,但在特定的开发环境中可能并不总是可用。在后一种情况下,了解如何回退到基础 R 功能会很有帮助。
我真的很喜欢 R 中的应用系列,但我认为我仍然没有充分利用它。
with(mtcars, tapply(mpg, cyl, mean))
sapply(mtcars, mean)
例如,这两个函数非常好,但是我如何将它们组合起来以获得变量 cyl 的每个类别的每个变量的平均值?
我猜使用 dplyr 很容易:
mtcars %>%
group_by(cyl) %>%
summarise_all(mean)
对于dplyr来说似乎很容易。因此,也许另一个问题可能是,当 dplyr 使解决问题变得容易时,为什么甚至学习所有这些应用函数也是有用的? :-)
如果您正在寻找基本的 R 解决方案,那么您可以使用 split
通过 cyl
分隔数据框,然后像以前一样使用 sapply
:
S <- split( mtcars, mtcars$cyl )
lapply( S, function(x) sapply(x, mean) )
你的第二个问题主要是基于意见,所以我会给出我的:tidyverse
包,如 dplyr
,建立在基础 R 功能之上,为通用提供方便和一致的界面数据操纵操作。出于这个原因,它通常是可取的,但在特定的开发环境中可能并不总是可用。在后一种情况下,了解如何回退到基础 R 功能会很有帮助。