2016-06-21 46 views
1

我需要重複n次數據幀的同一行,並將行綁定到新的數據幀。R:需要用R中的apply函數編寫相同的代碼

我可以很容易地使用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) 
} 
+2

'nrow(TESTDATA [我])'...這沒有意義,我演示。它總是會返回'1',不是嗎? –

+0

是的,因爲我在每一行循環它將只返回1. – PPC

回答

3

我們不需要循環來做到這一點,因爲rep是向量化的。

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

在上面的代碼,.N表示行數,並通過與​​包裹,我們得到的序列。即,如果行數是1000,它會給1:1000

只是用一個小例子

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

你能解釋一下.N在這裏做什麼?它是否每次都需要每行?據我所知,N被用來計數。 – PPC

+0

@PPC在帖子中添加了一些說明。如果這樣做,請考慮通過點擊投票旁邊的勾號來接受解決方案。 – akrun

+1

是的,它工作。感謝您的解決方案。打勾正確 – PPC