相当于Stata';s在R中展开

相当于Stata';s在R中展开,r,stata,R,Stata,在查看同事的Stata代码时,我遇到了命令expand 我真的很想能够在我自己的R代码中做同样的事情 基本上,expand将数据集复制n次,但可以选择创建一个新变量,如果观察最初出现,则该变量为0 如果观察结果是重复的,则在数据集中输入1 有人知道在R中实现这一点的快速方法吗?还是写我自己的函数?rep\R在R中查找rep()。但您可能需要对其进行调整,以获得stata扩展函数的精确副本。如果您可以共享一小部分数据和预期的输出,您肯定会得到更好的答案。好主意是为R用户提供可访问的文档。通过浏览文

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

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

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


有人知道在R中实现这一点的快速方法吗?还是写我自己的函数?

rep\R在
R
中查找
rep()
。但您可能需要对其进行调整,以获得stata扩展函数的精确副本。如果您可以共享一小部分数据和预期的输出,您肯定会得到更好的答案。好主意是为R用户提供可访问的文档。通过浏览文档,比我们知道的要多得多,因为他们使用Stata和R。感谢您的提示和编辑,我将来一定会添加链接,不需要任何
Reduce
mapply
,因为
rep
也接受向量作为
times
参数。与stata的唯一区别似乎是如何处理小于1的值。因此,一种更有效的函数方法是
扩展_r@nicola谢谢你的宝贵提示。
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