Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 防止扩展数据中的舍入数_R - Fatal编程技术网

R 防止扩展数据中的舍入数

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

我有一个名为df的大数据框,有1481581个观测值。我想做的是根据权重变量扩展我的数据框。展开后的实际观察值应为75149669,但展开数据时,由于四舍五入权重值,某些观察值被忽略。我的问题是如何在不进行任何舍入的情况下扩展数据。 任何帮助都将不胜感激

 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)),]