意見認爲我們有,如何複製基於重量
library(data.table)
dt <- data.table(id = 1:4, x1 = 10:13, x2=21:24, wt=c(1,0,0.5,0.7))
回報,
id x1 x2 wt
1: 1 10 21 1.0
2: 2 11 22 0.0
3: 3 12 23 0.5
4: 4 13 24 0.7
我想複製在下列條件下觀察:
- 如果
wt
是0或1,我們分配flag
分別等於1和0, - 如果0 <
wt
< 1,我們分配flag
等於0。此外,我們複製此觀察wt = 1-wt
和分配flag
等於1
,我期待的回報將是
id x1 x2 wt flag
1: 1 10 21 1.0 0
2: 2 11 22 0.0 1
3: 3 12 23 0.5 0
4: 3 12 23 0.5 1
5: 4 13 24 0.7 0
6: 4 13 24 0.3 1
我試圖與我的代碼
dt[,flag:=ifelse(wt==1,0, ifelse(wt==0, 1, 0))]
dt[,freq:=ifelse(wt > 0 & wt < 1, 2, 1)]
dtr <- dt[rep(1:.N, freq)][,Indx:=1:.N, by = id]
dtr[freq==2&Indx==2, wt:=1-wt]
dtr[Indx==2,flag:=1]
dtr[,`:=`(freq=NULL, Indx=NULL)]
不過,我想是不是高效。
你有什麼建議嗎?
在'data.table'中以行方式工作將會效率低下。我建議一個'base' R解決方案。 –