如何重复data.frame?
重复一次data.frame很容易如何重复data.frame?,r,dataframe,R,Dataframe,重复一次data.frame很容易 mt2 <- rbind(mtcars, mtcars) 这非常简洁,但似乎不符合R的精神。有没有更好的方法来做到这一点,或者是使用向量回收的巧妙方法?这里有一个非常简单的方法: mtcars[rep(1:nrow(mtcars),2),] 或者使用更好的“语法”: 正如GSee在下面所指出的,这里的一个区别是,rbind将精确复制行名,而使用索引将通过追加数字强制使用唯一的行名。在我脑海中,我认为唯一的解决办法是在事后设置行名(再次使用rep)。@
mt2 <- rbind(mtcars, mtcars)
这非常简洁,但似乎不符合R的精神。有没有更好的方法来做到这一点,或者是使用向量回收的巧妙方法?这里有一个非常简单的方法:
mtcars[rep(1:nrow(mtcars),2),]
或者使用更好的“语法”:
正如GSee在下面所指出的,这里的一个区别是,
rbind
将精确复制行名,而使用索引将通过追加数字强制使用唯一的行名。在我脑海中,我认为唯一的解决办法是在事后设置行名(再次使用rep
)。@joran的回答非常优雅,如果不需要复制行名,您应该使用它。但是,这种方式也会复制行名:
do.call(rbind,replicate(10,mtcars[1:10,],simplify=FALSE))
如果您可以容忍另一个包:
require(mefa)
rep(mtcars,10)
- 毕竟,工作李>
system.time(mtcars[rep(1:nrow(mtcars),1e5),])
system.time(mtcars[rep(seq_len(nrow(mtcars)),1e5),])
system.time(rep(mtcars,1e5))
给出:
user system elapsed
17.41 0.19 17.89
17.11 0.31 17.91
6.79 0.70 7.67
注意事项:1)rep不会复制行名称;这是一个单独的步骤。2)
mefa::rep(mtcars,10)
不起作用:错误:“rep”不是从“namespace:mefa”导出的对象。
。另外mefa:::rep(mtcars,10)
给出未找到对象“rep”
。不确定为什么这是基于dplyr的解决方案(来自)
虽然这给出了不同的行名,所以
相同(rbind(mtcars,mtcars),mtcars[rep(1:nrow(mtcars),2),])
是错误的我对rep(mtcars,10)
不起作用感到失望,但当然这是rep
的方法。因为mefa
提供的是一种rep
数据帧方法,因此mefa:::rep.data.frame(mtcars,10)
起作用。另外,查看mefa:::rep.data.frame
,它是一个单行程序,因此不需要加载包<代码>rep.data.frame
system.time(mtcars[rep(1:nrow(mtcars),1e5),])
system.time(mtcars[rep(seq_len(nrow(mtcars)),1e5),])
system.time(rep(mtcars,1e5))
user system elapsed
17.41 0.19 17.89
17.11 0.31 17.91
6.79 0.70 7.67
library(dplyr)
mtcars %>% slice(rep(1:n(), 2)) # 2 copies of data frame