根据长度为`的向量复制data.frame

时间:2017-01-14 22:49:17

标签: r dataframe replication

我有data.frame

set.seed(1)
short.df <- data.frame(id=letters[1:10],name=LETTERS[1:10])

我希望用长度等于nrow(short.df)的向量复制每一行多次:

lengths <- c(sample(10000,10,replace=F))

这对我的实际数据大小来说太长了:

long.df <- do.call(rbind,lapply(1:length(lengths),function(x) data.frame(id=rep(short.df$id,lengths[x]),name=rep(short.df$name[x],lengths[x]))))

任何更快的方式吗?

1 个答案:

答案 0 :(得分:4)

您可以使用rep() i参数中的[.data.frame复制行。

long.df <- short.df[rep(1:nrow(short.df), lengths), ]

检查:

identical(nrow(long.df), sum(lengths))
# [1] TRUE

新行名称可能不合适,但这些行名称很容易更改。