基于基R中另一个向量的值生成重复值向量

基于基R中另一个向量的值生成重复值向量,r,vector,R,Vector,样本数据 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) 请提供仅限base R的解决方案,谢谢 编辑 我希望提供的代码能够在批处理情况下工作,其中批处理可以是非递增序列,也可以是非连续序列(即1,3,4,5等) 该索引可用于复制。在R中,索引从1开始。因此,如果我们指定多个1,它将多次从第一个位置提取“alpha”对象中

样本数据

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)
请提供仅限base R的解决方案,谢谢

编辑

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


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

alpha[batch]

另一种方法是将
rep
table
一起使用

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
当批处理
不遵循顺序
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

批处理非常简单,谢谢@Latrio最好提供一个更一般的例子,因为当有人回答这个问题时,它是基于提供的例子。我最初接受了你的答案,我还不太懂礼仪,但我无法预见这种边缘情况,@Ronak Shah的解决方案让我意识到了这种边缘情况,所以他的回答(尽管我没有提供一个一般性的例子)最终更具普遍性。你的答案比他或他更“正确”吗而不是你的?我希望我能接受这两个答案。如果我要编辑问题以包含更一般的情况,你会返回你的投票吗?只是想知道这里的礼仪,以及投票的实际含义。我想知道如果你编辑解决方案以包括一般情况,
alpha[match(batch,sort(唯一(批次))]
,那么我会接受你的答案,因为我想指出未来,所以遇到这个问题的用户会选择最普遍、最直接的解决方案,也因为我一开始确实接受了你的答案。@Latrio没关系。在选择通用解决方案和适用于示例的解决方案时,总会有一个权衡。在这种情况下,我选择此选项是因为它非常紧凑,并且我假设您的案例非常适合基于此示例。如果示例更一般一些,可能会得出一些不同的结果。我的重点不是接受解决方案。您可以选择最适合您的解决方案。另外,
batch
可以通过这种方式创建
rep(1:3,3:5)
很高兴知道,谢谢!谢谢,这实际上是一个更具普遍性的解决方案。通常情况下,批次应该从数据中的1开始排序,但如果是“dumb”用户,此解决方案将涵盖这一点!
alpha[batch]
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 <- 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