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