【问题标题】:Compute user defined function output by group in R在R中按组计算用户定义的函数输出
【发布时间】:2018-06-04 10:03:07
【问题描述】:

我正在尝试计算定期行间隔的 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对每个组进行函数计算并返回输出。我知道像 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))
  • @pieca 你为什么不把它写成答案;)

标签: r apply tapply


【解决方案1】:

tapply(df$samp.45, as.factor(df$group), function(x) z.hypothesis(x,mean,std))

【讨论】:

  • 就这样?! :P 好吧,我想了想,然后觉得可能因为已经定义了函数,所以不合适。
【解决方案2】:

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

【讨论】:

  • 感谢您的建议。这也是一个巧妙的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 2012-06-20
相关资源
最近更新 更多