2017-09-14 70 views
1

我有這個表R:複製表中一列

Name  ID Year Month Date 
John  8  2017 7  16  
Carol 90 2017 7  30 
Bug  9  2017 7  1 

我想複製這個同桌的4倍,所有的值應該是相同的。除了每月需要​​增加1的月份列之外。決賽桌應該看起來像這樣:

Name  ID Year Month Date 
John  8  2017 7  16 
Carol 90 2017 7  30 
Bug  9  2017 7  1 
John  8  2017 8  16 
Carol 90 2017 8  30 
Bug  9  2017 8  1 
John  8  2017 9  16 
Carol 90 2017 9  30 
Bug  9  2017 9  1 
John  8  2017 10  16 
Carol 90 2017 10 30 
Bug  9  2017 10 1 
John  8  2017 11 16 
Carol 90 2017 11 30 
Bug  9  2017 11 1 

請在R中如何高效地做到這一點。非常感謝!

+0

「請指出如何在R中有效地做到這一點」.....在R一切都很有效率:-)) – PoGibas

回答

2

如果這是你的數據框:

df = read.table(text = "Name ID Year Month Date 
      John 8 2017 7 16 
      Carol 90 2017 7 30 
      Bug 9 2017 7 1", header = TRUE) 

那麼這就是你的數據框重複:

df2 = df[rep(rownames(df), 4),] 

而這又是它,但與幾個月遞增:

df2$Month = df2$Month + rep(0:3, 3) 

在更一般的情況下:

m = 4 # <-- number of rows desired 
df2 = df[rep(rownames(df), m), ] 
df2$Month = df2$Month + rep(0:m, nrow(df)) 
+2

對於你的最後一行,你想'df2 $ Month + rep(0:3,each = nrow(DF))'。 – lmo

+0

錯誤'[.data.table'(df,rep(rownames(df),m),): 當我是一個data.table(或字符向量)時,要加入的列必須使用' on ='參數(請參閱?data.table)或鍵入x(即排序,並標記爲排序,請參閱?setkey)。由於x在RAM中排序,鍵控連接可能對超大型數據具有進一步的優勢。 – Pree

+0

這有效:df2 < - df [rep(1:nrow(df),m),]。這是我的錯,謝謝你指出lebelinoz! – Pree