我想基于变量iptw
的值复制观察值,以创建伪种群以进行进一步分析。
例如,如果创建iptw=4.5
,则应创建weight=5
,并将观察值/行乘以5。同样,如果创建iptw=2.3
,则应创建weight=2
,并且行乘以2,相当于将相应的观察值两次添加到数据帧。
这是我的数据集:
dtNEW <- data.table(id = 1:4, x1 = 10:13, x2=21:24, iptw=c(2.3,0.6,4.5,0.1))
有一个类似的问题here,但那里的解决方案无法回答我的问题。
答案 0 :(得分:3)
假设您要复制第i行(iptw [i])次:
dtNEW[rep(1:.N, round(iptw)), ]
给予:
id x1 x2 iptw
1: 1 10 21 2.3
2: 1 10 21 2.3
3: 2 11 22 0.6
4: 3 12 23 4.5
5: 3 12 23 4.5
6: 3 12 23 4.5
7: 3 12 23 4.5
答案 1 :(得分:1)
另一个选择是uncount
中的tidyr
library(tidyr)
uncount(dtNEW, round(iptw))
# id x1 x2 iptw
#1: 1 10 21 2.3
#2: 1 10 21 2.3
#3: 2 11 22 0.6
#4: 3 12 23 4.5
#5: 3 12 23 4.5
#6: 3 12 23 4.5
#7: 3 12 23 4.5