R 防止扩展数据中的舍入数
我有一个名为df的大数据框,有1481581个观测值。我想做的是根据权重变量扩展我的数据框。展开后的实际观察值应为75149669,但展开数据时,由于四舍五入权重值,某些观察值被忽略。我的问题是如何在不进行任何舍入的情况下扩展数据。 任何帮助都将不胜感激R 防止扩展数据中的舍入数,r,R,我有一个名为df的大数据框,有1481581个观测值。我想做的是根据权重变量扩展我的数据框。展开后的实际观察值应为75149669,但展开数据时,由于四舍五入权重值,某些观察值被忽略。我的问题是如何在不进行任何舍入的情况下扩展数据。 任何帮助都将不胜感激 district residence gender age weight Id 1 00 3 2 23 49.4216 1 2 00 3 1 44
district residence gender age weight Id
1 00 3 2 23 49.4216 1
2 00 3 1 44 49.4216 2
3 00 3 1 71 49.4216 3
4 00 3 1 33 49.4216 4
5 00 3 1 18 49.4216 5
6 00 3 1 51 49.4216 6
7 00 3 1 65 49.4216 7
8 00 3 1 24 49.4216 8
9 00 3 1 41 49.4216 9
10 00 3 2 7 49.4216 10
11 00 3 1 53 49.4216 11
12 00 3 2 12 49.4216 12
13 00 3 1 14 49.4216 13
14 00 3 2 35 49.4216 14
15 00 3 2 12 49.4216 15
16 00 3 2 21 49.4216 16
17 00 3 1 17 49.4216 17
18 00 3 2 37 49.4216 18
19 00 3 2 71 49.4216 19
df1 <- df [rep(1:nrow(df), df$weight),]
地区居住性别年龄体重Id
1 00 3 2 23 49.4216 1
2 00 3 1 44 49.4216 2
3 00 3 1 71 49.4216 3
4 00 3 1 33 49.4216 4
5 00 3 1 18 49.4216 5
6 00 3 1 51 49.4216 6
7 00 3 1 65 49.4216 7
8 00 3 1 24 49.4216 8
9 00 3 1 41 49.4216 9
10 00 3 2 7 49.4216 10
11 00 3 1 53 49.4216 11
12 00 3 2 12 49.4216 12
13 00 3 1 14 49.4216 13
14 00 3 2 35 49.4216 14
15 00 3 2 12 49.4216 15
16 00 3 2 21 49.4216 16
17 00 3 1 17 49.4216 17
18 00 3 2 37 49.4216 18
19 00 3 2 71 49.4216 19
你想要这个吗
df1 <- df [rep(1:nrow(df), ceiling(df$weight)),]
df1不可能将一行重复49.4216次,因此您可以通过将权重四舍五入的方式来处理此问题,以保留总和,例如:
c.weights <- round(cumsum(df$weight), 0) #cumulative weights, rounded
i.weights <- c(c.weights[1], diff(c.weights)) #weight for each row as integer
df1 <- df [rep(1:nrow(df), i.weights),]
c.weights也许你想使用天花
:df[rep(1:nrow(df),天花(df$weight)),]
如果不四舍五入,如何将一行展开为49.4216的重量?它可以工作,但我的数据将大于75149669!由于rep
的times
参数应该是整数,因此您必须解释您希望使用什么规则来近似权重。尝试不同的十进制数表明,该函数使用下限
近似于次
,即使用最小的整数。使用天花板
将权重近似为最大整数非常感谢。你能解释更多关于c.weights和i.weights的信息吗?希望更新能帮助你更好地理解这一点
set.seed(0)
df1 <- df[sample(nrow(df), sum(df$weight) replace=TRUE, prob=df$weight)),]