我正在尝试创建一个函数,该函数根据另一列的级别为我提供方法。我知道R有很多功能可以执行相同的操作,但是由于我打算使用引导程序包,因此我需要提供一个要使用的功能(该程序包似乎没有预先定义的功能,例如如“ FUN =平均值”)。很抱歉有这样一个基本问题!
我搜索了有关R中函数创建基础的页面,但找不到我想要的东西。这是我想要使用虹膜数据集并轻按的示例:
data(iris)
with(iris, tapply(Sepal.Length, Species, mean))
因此,我想要一个函数,该函数为我提供X data.table(在此情况下为虹膜)的每个级别(种类)的平均值(Sepal.Length)。
setosa versicolor virginica
5.006 5.936 6.588
答案 0 :(得分:2)
您可以在tapply
周围使用包装函数,并将FUN
设置为mean
。像这样:
func <- function(data, x, y) {
tapply(data[[x]], data[[y]], mean)
}
然后使用它,就像:
func(iris, 'Sepal.Length', 'Species')
# setosa versicolor virginica
# 5.006 5.936 6.588
答案 1 :(得分:2)
带有tidyverse
f1 <- function(data, grpCol, valueCol) {
grpCol <- enquo(grpCol)
valueCol <- enquo(valueCol)
data %>%
group_by(!! grpCol) %>%
summarise(Mean = mean(!! valueCol))
}
f1(iris, Species, Sepal.Length)
# A tibble: 3 x 2
# Species Mean
# <fct> <dbl>
#1 setosa 5.01
#2 versicolor 5.94
#3 virginica 6.59
答案 2 :(得分:2)
如果要按组引导均值,则可以按照以下几行进行操作。
这是您的代码,即Species
组的完整数据集。
res1 <- with(iris, tapply(Sepal.Length, Species, mean))
现在有一个引导功能及其应用。
library(boot)
bootMeans <- function(data, indices, val, catg, na.rm = FALSE){
val <- deparse(substitute(val))
catg <- deparse(substitute(catg))
d <- data[indices, ]
tapply(d[[val]], d[[catg]], mean, na.rm = na.rm)
}
set.seed(1234)
b <- boot(iris, bootMeans, R = 1000,
val = Sepal.Length, catg = Species, na.rm = TRUE)
identical(b$t0, res1)
#[1] TRUE
colMeans(b$t)
#[1] 5.006788 5.940504 6.588357