从重塑的数据中以重复的方式排列数据集

Arrange a data set in a repeating manner from a reshaped data

我已经将数据整形为 long。它已根据一列按升序排序(如以下可重现示例中的 x2),我想以重复方式而不是分解方式保留数据。这是一个示例:

set.seed(234)
data<-data.frame(x1=c(1:12),x2=rep(1:3,each=4),x3=runif(12,min=0,max=12))

我想要这样的格式:

   x1 x2       x3
1   1  1 6.115445
2   2  2 5.157014
3   3  3 4.793458
4   4  1 9.998710
5   5  2 2.620250
6   6  3 1.825839
7   7  1 5.842854
8   8  2 5.616670
9   9  3 6.511315
10 10  1 9.164444
11 11  2 8.401418

能否请您帮助我解决在将数据转换为长格式时在 melt 函数中包含的内容,或者我应该在重新排列该数据时使用的任何其他函数。

注意:
上面的结果是显示所需的格式,而不是我的数据的确切解决方案。

编辑: 这是我的真实数据 head()

       Date stn Elev  Amount
1 2010-01-01  11    0 268.945
2 2010-01-01  11    0 268.396
3 2010-01-01  11    0 267.512
4 2010-01-01  11    0 266.488
5 2010-01-01  11    0 265.558
6 2010-01-01  11    0 265.178

在实际数据中,列 Elev 包含类似 c("0","100","250","500"...) 的值。因此,您假设 0 等同于上述示例 x2 中的 1,等等 100250...

一种方法是使用ave,如下所示:

data[order(ave(data$x3, data$x2, FUN=function(i) 1:length(i)), data$x2),]
   x1 x2         x3
1   1  1  8.9474400
5   5  2  0.8029211
9   9  3 11.1328381
2   2  1  9.3805491
6   6  2  7.7375415
10 10  3  3.4107614
3   3  1  0.2404454
7   7  2 11.1526315
11 11  3  6.6686992
4   4  1  9.3130246
8   8  2  8.6117063
12 12  3  6.5724198

在这种情况下,ave 计算数据 $x2 的 运行 计数,然后使用 order 函数对数据进行排序。

如果需要,您也可以对 x1 重新编号:data$x1 <- 1:nrow(data),这将 return 您想要的结果。