相当于Stata在R中的扩张

时间:2017-09-19 10:30:20

标签: r stata

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

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

基本上expand重复数据集n次,但可以选择创建一个新变量,如果观察最初出现则为0 在数据集中,如果观察结果重复,则为1。

有人知道在R中实现这个的快速方法吗?或者是编写我自己的函数的情况?

1 个答案:

答案 0 :(得分:2)

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

编辑:感谢 @nicola 的建议,上述功能可以通过以下单线程实现。

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