【问题标题】:Linking if true statement in R在R中链接if true语句
【发布时间】:2012-07-30 00:00:37
【问题描述】:

我在 R.800 个样本中有一组数据,其中 12 个观察值在 10 到 20 之间随机生成。由此,我有两个选项,如果随机生成的数字小于 15,则选择选项一及以上15,它的选项 B。现在我想根据选项 A 的平均值和 sd 作为选项 A 为真的正态分布为选项一生成一组数据。

Run1 <- replicate(800, rnorm(12, mean=16, sd=3.1))

我不确定如何链接我的另一段代码,说明选项 A 是否为 TRUE,从而为 Run1 生成一个值?

edit:我目前基本上有一个由 TRUE 和 FALSE 组成的矩阵,用于上述参数(选项 A - mean=16, sd=3.1 和选项 B - mean=18, sd= 3.3) 其中 A 对于低于 15 的值是 TRUE,对于高于 15 的值是 FALSE。因此导出了这样的矩阵(只是完整矩阵的一个小样本)

  [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  

[1,] 真真假真假真假真
[2,]真真假假真真真假

所以我现在想要的是两个矩阵(一个用于 A,一个用于 B),它们提供一个平均值,其中 A 为 TRUE(矩阵 A)来自上面详述的选项 A 值的正态分布和 B 的平均值从上面详述的选项 B 值的正态分布来看,它是 FALSE(矩阵 B),理想情况下是 N/A 或类似的值,该值不应在相应的矩阵中生成。

最后我还想将这两个矩阵组合起来形成第三个最终矩阵。可能看起来很费力,但这是必要的。

谢谢

【问题讨论】:

  • 我不太明白。您想为两种情况(A、runifval&lt;15 vs B、runifval&gt;=15)生成 800 组 12 个正态偏差,并选择不同的均值和标准差吗?如果是,{16,3.1} 是案例 A 的选择吗?您能告诉我们案例 B 的对应值是多少吗?
  • 是的,差不多就是这样。 case b 是 18(平均值)和 3.3(sd),据说关键部分是显然我只希望根据前面的代码生成一个值,如果 A 为 TRUE 并且值为在 B 为 FALSE 的情况下呈现。
  • 您是指为每个案例选择的 12 个项目吗?
  • 请参见上面的进一步编辑。

标签: r


【解决方案1】:

一种方法是构造一个大小合适的矩阵,然后使用行索引将值填充到适当的行中...

set.seed(101)
runifvals <- runif(800,10,20)
result <- matrix(nrow=800,ncol=12)
lowvals <- runifvals<=15
## sum(lowvals) is the number of rows of data we have to generate for case A ...
result[lowvals,]  <- rnorm(sum(lowvals)*12, 16,3.1)
result[!lowvals,] <- rnorm(sum(!lowvals)*12,18,3.3)

这假设可以将结果作为 800x12 矩阵(但这可能是通常最方便的格式)。

编辑如果你真的想要两个带有嵌入式 NA 的独立矩阵(这看起来很奇怪/浪费,但无论如何......):

matA <- matB <- matrix(NA,nrow=800,ncol=12)
matA[lowvals,]  <- rnorm(sum(lowvals)*12, 16,3.1)
matB[!lowvals,] <- rnorm(sum(!lowvals)*12,18,3.3)

【讨论】:

  • 是的,很好,我希望有两个不同的矩阵,一个用于选项 A,一个用于 B,您认为最方便的方法是什么?
  • 我快到了,但我遇到了意外错误:“错误:意外','在“matA
  • 是的,你是对的,它现在有点奇怪,但它必须用于下一步即时编码。正如我确定的那样,您目前已经意识到我在 R 中是一个完全的新手,但正在快速学习。您的上述编辑几乎是我一直在寻找的,只是它给出了矩阵 A 作为所有 N/A 和 B 作为完整集:)
  • 那是因为我不小心将 runifvals 的最小值设置为 15 而不是 10 ...请参阅上面的编辑版本
  • 感谢您的帮助,非常感谢。输出似乎有些奇怪,因为它遵循一个非常独特的模式,我的意思是,要么整行都有值,要么这两个选项都是 N/a。这并不反映我早期工作的随机性。
猜你喜欢
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 2012-12-19
  • 2015-02-08
  • 2022-07-11
相关资源
最近更新 更多