r - 难以对变量进行分组并将函数应用于组

标签 r grouping tapply

我需要将数据分为 2 或 3 个选择级别,并对每个特定组应用一个函数。当我使用标准函数(均值、中位数、SD)时,命令 tapply 会执行此操作,但当我插入多个过滤变量时,它不起作用。

代码:

  tipo      <-  rep(LETTERS[1:3], 9)
  vendedor  <-  rep(LETTERS[11:13], 9)        
  produto   <-  rep(LETTERS[17:19],9)
  valor     <-  trunc(rnorm(27,1000,50)) 
  dados     <-  data.frame(tipo, vendedor, produto, valor)
  funcao    <-  function(dados) c(media = mean(valor), 
                                 desvio = sd(valor)*0.23)
  simplify2array(tapply(dados$valor, dados$tipo, funcao))
  simplify2array(tapply(dados$valor, list(dados$tipo, dados$vendedor), funcao))

命令tapply 1的输出,工作正常:

> simplify2array(tapply(dados$valor, dados$tipo, funcao))
            A          B          C
media  998.370370 998.370370 998.370370
desvio   9.763732   9.763732   9.763732

tapply 2 命令的输出,无法正常工作:

> simplify2array(tapply(dados$valor, list(dados$tipo, dados$vendedor), funcao))
  K         L         M        
A Numeric,2 NULL      NULL     
B NULL      Numeric,2 NULL     
C NULL      NULL      Numeric,2

有人知道我该如何解决这个问题吗?

最佳答案

据我了解,您有一个函数 funcao 返回 2 个元素(mediadesvio),并且您想要应用它使用 tapply 跨每个 tipo/vendor 配对。您可以通过以下方式执行此操作:

funcao <- function(valor) c(media = mean(valor), desvio = sd(valor)*0.23)
simplify2array(tapply(dados$valor, paste(dados$tipo, dados$vendedor), funcao))
#              A K       B L        C M
# media  967.11111 989.11111 1001.55556
# desvio  12.55158  12.63768   11.27241

基本上我所做的就是将分组变量从list(dados$tipo, dados$vendingor)更改为paste(dados$tipo,dados$vendingor),这只是将 tipovendor 变量粘贴在一起。感谢 @thelatemail 的评论,我还更新了 funcao 以使用其参数。

关于r - 难以对变量进行分组并将函数应用于组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33071792/

相关文章:

r - tapply 错误 : arguments must have same length

r - Sys.getenv() 在 Shiny Apps 中返回空

r - 将数据帧分成相等的部分

json - R:将 JSON 时间格式转换为 POSIX

php - 按列值的前导字符对数据行进行分组

python - openpyxl 组列,其中 "Summary Columns to the Right of Detail"未选中

R - "linearizing"tapply 的结果(到一个单一向量,按列解包)

R 函数 which.max with tapply

python - Python 的 hashlib.sha256(x).hexdigest() 是否等同于 Rs digest(x,algo ="sha256")

python - 每月基于列的大值的子集数据框