4

每次有 5 个独特的关卡时,我都想要一个新的分组

前任。varB 是期望的结果

structure(list(varA = structure(c(2L, 2L, 3L, 5L, 4L, 1L, 1L, 
2L, 3L, 5L, 4L, 4L, 1L), .Label = c("badger", "cat", "dog", "monkey", 
"turtle"), class = "factor"), varB = c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L)), .Names = c("varA", "varB"), class = "data.frame", row.names = c(NA, 
-13L))

编辑:关于数据的一些假设:

  • 级别稍后在数据中重复
  • 新的水平出现在数据的后面
  • 数据中没有固定的顺序
4

1 回答 1

4

对“新”值的累积和使用模除法:

dat$cu5 <- with(dat, 1+ cumsum( c(0, varA[-length(varA)] != varA[-1])) %/% 5)

仅当您希望编号从 1 开始时才需要添加一个。如果您将其分解并添加标签,则不需要它。

于 2012-08-22T20:41:18.087 回答