代码之家  ›  专栏  ›  技术社区  ›  Esther

R中Stata展开的等价物

  •  2
  • Esther  · 技术社区  · 7 年前

    在查看同事的Stata代码时,我遇到了命令 expand

    我真的很希望能够在我自己的R代码中做同样的事情。

    基本上

    2 回复  |  直到 7 年前
        1
  •  2
  •   tushaR    7 年前
    rep_r<-function(x,n){if(n<=1){rep(x,times=1)}else{rep(x,times=n)}}
    
    expand_r<-function(x,n){
        Reduce(function(x,y)
            {c(x,y)},mapply(rep_r,x,n))
    }
    
    expand_r(c(2,3,4,1,5),c(-1,0,1,2,3))
    #[1] 2 3 4 1 1 5 5 5
    

    编辑 :感谢来自的建议 上述功能可以通过以下一个线性程序简单地实现。

    expand_r<-function(x,n) rep(x,replace(n,n<1,1))
    #>expand_r(c(2,3,4,1,5),c(-1,0,1,2,3))
    #[1] 2 3 4 1 1 5 5 5
    
        2
  •  1
  •   Nick Cox    3 年前

    此函数用于扩展数据行。像Stata一样的框架 expand 命令执行。我是从R那里得到这个主意的 mefa

    expand_r <- function(df, ...) {
      as.data.frame(lapply(df, rep, ...))
    }
    
    df <- data.frame(x = 1:2, y = c("a", "b"))
    
    expand_r(df, times = 3)