R-组内的载体向量,保留顺序



我有一个向量:

x = {x1, x2, x3, ..., xn}

和一些组:

g = {g1, g2, g3, ..., gn}

我想将每个组内的矢量元素洗牌,但要保留原始的组排序。例如:

x = c(1, 2, 3, 4, 5)
g = c('a', 'b', 'a', 'b', 'b')

好的解决方案:

shuffled_x = c(3, 5, 1, 4, 2)
shuffled_g = c('a', 'b', 'a', 'b', 'b')

坏解决方案:

shuffled_x = c(3, 1, 4, 5, 2)
shuffled_g = c('a', 'a', 'b', 'b', 'b')

我已经知道如何在组中进行洗牌:

y = tapply(x, g, sample)

只是不确定如何保持正确的顺序。

我认为 ave会在维护组的元素之间进行洗牌:

ave(x, g, FUN = sample)
#[1] 1 4 3 5 2
ave(x, g, FUN = sample)
#[1] 3 4 1 2 5
ave(x, g, FUN = sample)
#[1] 3 2 1 4 5

相关内容

  • 没有找到相关文章

最新更新