如何用随机数在R中创建一个数据帧,使每一行的总和等于100?

时间:2019-05-31 23:10:51

标签: r

我正在学习R语言,并且正在做一个小项目。我制作了一个数据表,并在其中填充了0到99之间的随机数。我想对其进行填充,以使表中的每一行(总共30列,共5列)的总和为100。现在,每一行都有随机数在0到99之间,但行总和不等于100。

这是我正在学习的R语言,所以我对语法不是很熟悉。我尝试了data.frame复制和矩阵,但是它们没有用。

这是我尝试过的(四种不同方式):

1)

> data.frame(replicate(5,sample(0:99, rowsum <= 100,30,rep=FALSE)))

2)

> data.frame(replicate(5,sample(0:99,30,rep=FALSE)))

3)

> data.frame(replicate(30,sample(0:99,rep=FALSE)))

4)

> nrow <- 30
> ncol <- 5
> mat <- matrix(nrow = nrow, ncol = ncol)
> i <- 1
> while (i <= nrow) {
+     x <- runif(1, 0, 100)
+     if (sum(x) <= 100) {
+         mat[i, ] <- x
+         i <- i + 1

使用方法1,我收到此错误:

  

rowsum <100中的错误:比较(3)仅适用于原子类型和列表类型

使用方法#2和#3,我得到了这一点(每行中的数字确实在0到100之间,但总和不超过100):

   X1 X2 X3 X4 X5

1  26  0 32 52 10

2  57 81  9 31 77

3  96 32 31 16 17

4   0 87 79 13 29

5  94 76 87 60 36

6  91 88 88 88 60

7  53 35  4  2 62

8  97 10 22 83 81

9  16 36 83 62 46

10 45 14 54 90 12

11 78 61 58 84 52

12 50 51 13 77 43

13 52 59 70 54 32

14 29 94 49 34 33

15 24 20 39 64 57

16 76 91 21 36 39

17 33 31  1 93 59

18 38 70 68 48 38

19 65  2 46 67 56

20  9 16  5 37 16

21  6 65 61 95 91

22 43 98 52 61 44

23 42 68 80 69 63

24 87 47 90 12 74

25 98 99 40 53 50

26 67 85 42 46 25

27 55 80 30 41 30

28 62 21 86  0 95

29 28 46 65 68 48

30 72  4 72 50 58

使用方法4,出现此错误:

  

sum(row)中的错误:参数的“类型”(关闭)无效

任何帮助将不胜感激。谢谢。

0 个答案:

没有答案