根据长度向量复制 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.frame
的 i
参数中使用 rep()
来复制行。
long.df <- short.df[rep(1:nrow(short.df), lengths), ]
检查:
identical(nrow(long.df), sum(lengths))
# [1] TRUE
新的行名称可能并不理想,但很容易更改。
我有一个 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.frame
的 i
参数中使用 rep()
来复制行。
long.df <- short.df[rep(1:nrow(short.df), lengths), ]
检查:
identical(nrow(long.df), sum(lengths))
# [1] TRUE
新的行名称可能并不理想,但很容易更改。