【问题标题】:Generate a vector of repeated values based on the values of another vector in base R根据基数 R 中另一个向量的值生成一个包含重复值的向量
【发布时间】:2021-01-14 22:01:20
【问题描述】:

样本数据

batch <- c(rep(1,3), rep(2,4), rep(3,5))
batch
[1] 1 1 1 2 2 2 2 3 3 3 3 3

alpha <- c(0.05, 0.04, 0.03)

问题陈述

我想创建一个向量,比如alphai,它以给定值重复alpha 的第i 个元素在batch 中出现的次数(例如,对于batch = 1,第一个值的 alpha 应该重复出现 1 的次数)。所需的输出应如下所示:

alpha
[1] 0.05 0.05 0.05 0.04 0.04 0.04 0.04 0.03 0.03 0.03 0.03 0.03

请提供仅基于 R 的解决方案,谢谢!

编辑

我希望提供的代码可以在批处理情况下工作,其中批处理可以是非递增序列或非连续序列(即 1、3、4、5 等)

batch2 <- c(rep(1,3), rep(3, 4), rep(4,5))
batch2
[1] 1 1 1 3 3 3 3 4 4 4 4 4

alpha 应该仍然是

[1] 0.05 0.05 0.05 0.04 0.04 0.04 0.04 0.03 0.03 0.03 0.03 0.03

【问题讨论】:

  • 顺便说一句,batch 可以这样创建 rep(1:3, 3:5)
  • 很高兴知道,谢谢!

标签: r vector


【解决方案1】:

索引可用于复制。在R 中,索引从 1 开始。因此,如果我们指定多个 1,它会多次从第一个位置提取 'alpha' 对象中的元素,对于其他索引也是如此。请注意,索引为 0 将被跳过,因为没有元素

alpha[batch]

【讨论】:

  • @latlio 最好提供一个更通用的示例,因为当有人回答问题时,它是基于提供的示例
  • 我最初接受了您的回答,但我还不太了解 SO 礼仪,但我无法预见这种极端情况,@Ronak Shah 的解决方案让我意识到了这种极端情况,所以他的回答(尽管我没有提供一个一般性的例子)最终变得更加普遍。你的答案比他的更“正确”,还是他的答案比你的更“正确”?我希望我能接受这两个答案。如果我要编辑问题以包含更一般的情况,您会投票吗?只是想知道这里的礼仪,以及投票的真正含义
  • 好的,我想知道 SO 礼仪是否会规定您是否编辑您的解决方案以包括一般情况,alpha[match(batch, sort(unique(batch))],然后我会接受您的,因为我想指出未来的 SO 用户在这个问题中选择最普遍和最直接的解决方案,也是因为我最初确实接受了你的回答。
  • @latlio 没关系。在选择通用解决方案与适用于示例的解决方案之间总是存在权衡。在这种情况下,我选择它是因为它非常紧凑,并且我假设您的案例非常适合基于示例。如果这个例子更笼统一点,就会想出一些不同的东西。我的意思不是接受解决方案。您可以选择最适合您的。
【解决方案2】:

另一种方法是将reptable 一起使用。

rep(alpha, table(batch))
#[1] 0.05 0.05 0.05 0.04 0.04 0.04 0.04 0.03 0.03 0.03 0.03 0.03

batch 不遵循序列1:3 时,这将很有帮助。例如,

batch <- rep(10:8, 3:5)
batch
#[1] 10 10 10  9  9  9  9  8  8  8  8  8

rep(alpha, table(batch))
#[1] 0.05 0.05 0.05 0.05 0.05 0.04 0.04 0.04 0.04 0.03 0.03 0.03

【讨论】:

  • 谢谢,这实际上是一个更通用的解决方案。通常,批次应从数据中的 1 开始排序,但在“愚蠢”用户的边缘情况下,此解决方案将涵盖这一点!
猜你喜欢
  • 2014-09-27
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2021-07-26
  • 2021-03-01
相关资源
最近更新 更多