根据长度向量复制 data.frame

Replicating a data.frame according to a vector of lengths`

我有一个 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]))))

有什么方法可以更快吗?

您可以在 [.data.framei 参数中使用 rep() 来复制行。

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

检查:

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

新的行名称可能并不理想,但很容易更改。