R:使用R中的apply函数编写相同代码所需的帮助

时间:2016-06-21 06:27:45

标签: r

我需要重复同一行数据帧n次,并将行绑定到新数据帧。

我可以使用for循环轻松完成它,但它有更多的计算时间。有人可以使用任何应用函数来帮助我这样做。

下面是我的代码原型。

testdata<-data.table(v1=sample(1000),v2=sample(1000),v3=sample(1000),v4=as.integer(runif(1000,1,10)))## Sample data
testdata1<-data.table(v1=NA,v2=NA,v3=NA,v4=NA)##creating empty data frame
for(i in 1:nrow(testdata)){
  temp<-testdata[i,][rep(seq_len(nrow(testdata[i,])), each=testdata$v4[i]),]
  testdata1<-rbind(temp,testdata1)
}

1 个答案:

答案 0 :(得分:3)

我们不需要循环来执行此操作,因为rep已经过矢量化。

testdata[rep(seq_len(.N),  testdata$v4)]

在上面的代码中,.N表示行计数,通过用seq_len包装,我们得到序列。即如果行数为1000,则会给出1:1000

只是用一个小例子来证明

rep(1:3, c(3,4,6))
#[1] 1 1 1 2 2 2 2 3 3 3 3 3 3