我有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]))))
任何更快的方式吗?
答案 0 :(得分:4)
您可以使用rep()
i
参数中的[.data.frame
复制行。
long.df <- short.df[rep(1:nrow(short.df), lengths), ]
检查:
identical(nrow(long.df), sum(lengths))
# [1] TRUE
新行名称可能不合适,但这些行名称很容易更改。