如何根据另一个变量的值复制观察值

时间:2018-12-15 21:32:45

标签: r dataframe dataset

我想基于变量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,但那里的解决方案无法回答我的问题。

2 个答案:

答案 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