在R中按组计算用户定义的函数输出
Compute user defined function output by group in R
我正在尝试计算固定行间隔内的 z 统计量。
mean = 77
std = 31
samp.45 = rnorm(45,mean,std)
z.test = function(a, mu, sd){
zeta = (mean(a) - mu) / (sd / sqrt(length(a)))
return(zeta)
}
z.hypothesis = function(a, mu, sd){
z.stat = z.test(a,mu,sd)
if(abs(z.stat)>1.96){
return(1)
}
else{
return(0)
}
}
group = as.numeric(ceiling(1:45/15))
df <- as.data.frame(cbind(samp.45, group))
## Correct this
tapply(df$samp.45, as.factor(df$group), z.hypothesis(df$samp.45,mean,std))
我打算使用tapply对每个组执行函数计算并return输出。我知道像 mean 这样的简单函数可以直接应用并给出所需的结果,但是我怎样才能为我自己的函数获得类似的输出呢?也欢迎任何其他方法。
> tapply(df$samp.45, as.factor(df$group), mean)
1 2 3
78.19556 79.65747 68.91818
tapply(df$samp.45, as.factor(df$group), function(x) z.hypothesis(x,mean,std))
在tidyverse
你可以试试
library(tidyverse)
df %>%
group_by(group) %>%
summarise(zh=z.hypothesis(samp.45, MEAN, std))
# A tibble: 3 x 2
group zh
<dbl> <dbl>
1 1 0
2 2 0
3 3 0
避免使用内部函数名作为变量名。因此我将 mean
重命名为 MEAN
我正在尝试计算固定行间隔内的 z 统计量。
mean = 77
std = 31
samp.45 = rnorm(45,mean,std)
z.test = function(a, mu, sd){
zeta = (mean(a) - mu) / (sd / sqrt(length(a)))
return(zeta)
}
z.hypothesis = function(a, mu, sd){
z.stat = z.test(a,mu,sd)
if(abs(z.stat)>1.96){
return(1)
}
else{
return(0)
}
}
group = as.numeric(ceiling(1:45/15))
df <- as.data.frame(cbind(samp.45, group))
## Correct this
tapply(df$samp.45, as.factor(df$group), z.hypothesis(df$samp.45,mean,std))
我打算使用tapply对每个组执行函数计算并return输出。我知道像 mean 这样的简单函数可以直接应用并给出所需的结果,但是我怎样才能为我自己的函数获得类似的输出呢?也欢迎任何其他方法。
> tapply(df$samp.45, as.factor(df$group), mean)
1 2 3
78.19556 79.65747 68.91818
tapply(df$samp.45, as.factor(df$group), function(x) z.hypothesis(x,mean,std))
在tidyverse
你可以试试
library(tidyverse)
df %>%
group_by(group) %>%
summarise(zh=z.hypothesis(samp.45, MEAN, std))
# A tibble: 3 x 2
group zh
<dbl> <dbl>
1 1 0
2 2 0
3 3 0
避免使用内部函数名作为变量名。因此我将 mean
重命名为 MEAN