2017-08-02 12 views
1

私は3つの変数を含んでいます。 3つの一意のIDがあり、それぞれに複数のレコードがあります。私は(Nは、パラメータをする必要があります)全体のデータをN回繰り返すことでしようとしている、と私は繰り返し数で新しい列を追加する必要がどのようなリピートデータN回目R

ID <- c(rep(1,2), rep(2,1), rep(3,2)) 
y0 <- c(rep(5,2), rep(3,1), rep(1,2)) 
z0 <- c(rep(1,2), rep(13,1), rep(4,2)) 

dat1 <- data.frame(ID, y0,z0) 

。 N = 2の場合、新しいデータがどのように見える

だから:

rep <- c(rep(1,2), rep(2,2), rep(1,1), rep(2,1), rep(1,2), rep(2,2)) 
ID <- c(rep(1,4), rep(2,2), rep(3,4)) 
y0 <- c(rep(5,4), rep(3,2), rep(1,4)) 
z0 <- c(rep(1,4), rep(13,2), rep(4,4)) 

dat2 <- data.frame(rep, ID, y0,z0) 
+2

試行 'DAT1 $担当者< - と(DAT1、AVE(ID、ID、FUN = seq_along))。 dat1 [rep(seq_len(nrow(dat1))、each = 2)、] ' – akrun

+0

ID = 2の場合は失敗します。 – user9292

+0

ID 2の2番目の繰り返しのrep列の値は2でなければなりませんが、ここでは1です。 – user9292

答えて

1

私たちは、予想される出力

res <- cbind(rep = rep(seq_len(2), each = nrow(dat1)), dat1[rep(seq_len(nrow(dat1)), 2),]) 
resN <- res[order(res$ID),] 
row.names(resN) <- NULL 
all.equal(dat2, resN, check.attributes = FALSE) 
#[1] TRUE 

それとも別のものを得るために、後でorderそれを行のシーケンスを複製し、オプションはreplicatelistに、次にMapを使用して 'rep'カラムを作成します(関数名はcolumn名、オブジェクト名など)とrbindlist要素

res1 <- do.call(rbind, Map(cbind, rep = seq_len(2), replicate(2, dat1, simplify = FALSE))) 
res2 <- res1[order(res1$ID),] 
row.names(res2) <- NULL 
all.equal(dat2, res2, check.attributes = FALSE) 
#[1] TRUE 
+0

@ user9292これは今動作するはずです。 – akrun

+0

動作します。ありがとう! – user9292