生成不同长度组内的序号(1,1,1,2,2,2,3,3,3)

Generate a sequence number (1,1,1,2,2,2,3,3,3) within groups of different length

我有一个包含列 "Tag" 的数据框,这里有四个不同的级别。我需要帮助来创建 "Seq" 列,这是从 "Tag" 列生成的序列:

df <- data.frame(Tag = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4),
                 Seq = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3 )

每个 "Tag" 应分为 "Seq" 定义的 3 个子组。我们需要生成1、2、3的运行s,总长度为每个"Tag"的总长度。因此,1、2、3的每个运行的长度分别取决于每个"Tag".

的长度

请注意每个 "Tag" 的长度不同。例如,标签 1 的长度为 31,并且有 "Seq" 101102113.

首先,标记 1 是 31,而标记 2 是 32。查看下面的代码,第一个数字 (1) 的长度始终小于接下来的两个 (2,3)。我使用了一个天花板过程来想出这个。如果数字是 31/3.. 应该给出 10、10、11 的长度,代码应该做什么没有明确的标准吗?甚至9、11,11都可以吗?该代码给出了 9、11、11 的长度:

 ec=table(Tag)
 unlist(mapply(function(x,y)rep(c(1,2,3),c(x,y,y)),ec-2*ceiling(ec/3),ceiling(ec/3)))

要检查输出结果,请将结果保存在变量中。d=mapply(... 然后做 sapply(d,table)。 希望这会有所帮助。

ave(Tag, Tag, FUN = function(x){sort(rep(x = 1:3, length.out = length(x)))})

解释:对于"Tag"(ave(Tag, Tag, ...)的每一层:rep把"Seq"(x = 1:3)的每一层都吃到"Tag" (length.out = length(x)) 的子集。 sort 数字。