【问题标题】:Self-Referencing Tables (R Programming Language)自引用表(R 编程语言)
【发布时间】:2021-10-10 22:44:27
【问题描述】:

我正在尝试使用 R 编程语言制作“自引用”网格。例如,我制作了以下(非自引用)网格:

var_1 <- rnorm(1000,8,5)
var_2 <- rnorm(1000,8,5)
var_3 <- rnorm(1000,8,5)
var_4 <- rnorm(1000,8,5)
var_5 <- rnorm(1000,8,5)
var_6 <- rnorm(1000,8,5)
var_7 <- rnorm(1000,8,5)

frame_a <- data.frame(var_1, var_2, var_3, var_4, var_5, var_6, var_7)

这行得通:

head(frame_a)
      var_1     var_2     var_3     var_4     var_5      var_6     var_7
1 11.106978  6.045635 12.059918 14.576642 6.6631061  2.4308557  4.210330
2  5.356593  9.066030 15.324603  4.170090 7.9821328  0.7412383  8.561553
3 16.971664  5.172987  6.501061  2.827789 0.5317087  6.2078346  9.151058
4  1.903000  7.183025 11.524599 12.188365 9.2445369  9.5063593  3.741548
5 11.744789 10.077375  4.740652  3.738349 6.1231457  5.3983903 -4.863340
6 14.151094  8.234436  8.203216 14.722724 9.6634154 -0.7918751 14.080428

现在,我正在尝试制作一个“自引用网格”——即具有特定条件的网格。对于此网格中的每一行:

  • var_2 必须始终大于 var_1
  • var_4 必须始终大于 var_3
  • var_6 必须始终大于 var_5
  • var_7 必须始终大于 var_6

这是我尝试制作这样一个网格

var_1 <- rnorm(1000,8,5)
var_2 <- rnorm(1000,var_1,5)
var_3 <- rnorm(1000,8,5)
var_4 <- rnorm(1000,var_3,5)
var_5 <- rnorm(1000,6,5)
var_6 <- rnorm(1000,var_5,5)
var_7 <- rnorm(1000,var_6,5)

frame_b <- data.frame(var_1, var_2, var_3, var_4, var_5, var_6, var_7)

此代码有效,但未遵守“条件”:

> head(frame_b)
       var_1     var_2    var_3     var_4     var_5       var_6      var_7
1  5.9667356  1.518180 9.316051  3.192931 -1.358661 -0.05681164 -5.3893074
2  8.4478170 11.902876 9.588589 -1.220872  6.091870  9.81611979  4.9043055
3 13.6396693  8.554241 9.017625 10.840609 -4.548760  0.22775771 -5.8313070
4 13.4776003 19.735430 4.674371  2.144886  4.933787 -3.13381274 -0.5747767
5  6.3300270 -1.968539 4.413483  5.490492  4.866916  3.72772243 10.1688481
6  0.3662306 -1.633712 6.142054  7.236065 12.506673 10.17450918  7.7536291

例如,在第一行:var_2 不大于 var_1。

谁能告诉我如何解决这个错误?

谢谢

【问题讨论】:

  • 您从正态分布中随机抽取数字。在var_2 中,每行中正态分布的平均值将等于var_1 中的值。因此,var_2 中(大约)一半的数字将少于 var_1 中的数字。
  • 您是不是要使用runif 而不是rnorm
  • @rawr:谢谢你的回复!我想我可以使用“runif”而不是“rnorm”。有很大区别吗?
  • 好吧 runif 完全按照您的意愿设置:(n, lower limit, upper limit),因此您可以使用var_1 的结果作为下限,前提是您的上限 > 所有var_1
  • @rawr :我试图根据你的逻辑想出一个答案。你能看一下吗?非常感谢您的帮助!

标签: r frame data-manipulation


【解决方案1】:

我尝试根据@rawr 提供的答案发布答案​​:

var_1 <- runif(1000, 0, 100)
var_2 <- runif(1000, var_1, 100)
var_3 <- runif(1000, 0, 100)
var_4 <- runif(1000, var_3, 100)
var_5 <- runif(1000, 0, 100)
var_6 <- runif(1000, var_5, 100)
var_7 <- runif(1000, var_6, 100)

frame_3 <- data.frame(var_1, var_2, var_3, var_4, var_5, var_6, var_7)


head(frame_3)
      var_1    var_2    var_3    var_4     var_5    var_6    var_7
1 16.824184 42.45956 26.68427 41.69108 66.104877 67.29392 92.26807
2  5.154861 74.42316 32.87011 73.93285  3.206936 62.48352 63.06708
3 35.263069 48.56498 34.64460 39.81641 12.816591 13.17151 72.77144
4 21.175502 27.04440 18.04221 64.40537 34.614670 65.89940 92.80989
5 17.156617 86.05252 10.88137 84.53697 86.133523 99.04071 99.55816
6 32.293821 89.77986 26.29747 49.53139 76.262548 81.88121 89.91402

这对吗?

谢谢

【讨论】:

  • 你为什么不根据上面的指标测试结果,让自己确定它是否有效?但总的来说,很好奇你所说的“自我引用”是什么意思。
  • @Chris:谢谢你的回复!我会开始研究这个!
猜你喜欢
  • 1970-01-01
  • 2016-09-19
  • 2016-09-03
  • 2011-06-28
  • 1970-01-01
  • 2014-09-11
  • 2011-05-17
  • 2011-10-05
相关资源
最近更新 更多