【问题标题】:R: grouping factors everytime n unique levels occur in dataR:每次在数据中出现 n 个唯一级别时对因子进行分组
【发布时间】:2012-08-22 18:46:22
【问题描述】:

每当有 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))

编辑:对数据的一些假设:

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

【问题讨论】:

  • 起始级别总是一样吗? (例如,在这种情况下,cat。)
  • @mrdwab 在看到你的帖子之前我正在编辑描述。没有固定的开始级别。

标签: r unique grouping levels factors


【解决方案1】:

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

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

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

【讨论】:

  • + 1 个很棒的解决方案!这解决了我在另一篇文章中提到的问题!
  • 啊,是的,这是个好问题。当没有足够的独特关卡来进行分组时会发生什么?我希望它只有 1 个分组,但看起来它将代表按 5 个分组。
  • 我猜它在那种情况下不起作用。 lselzers 也没有,而且我认为 @ttmaccer 的作品在较长的情况下也不起作用,因为他的第一个解决方案中的 !duplicated(dat$varA) 表达式在第一个系列之后永远返回 FALSE,并且这个测试用例在他的第二个解决方案中引发了错误。
  • 我宁愿希望 Jose 将复选标记分配给更好的解决方案。我没有删除已接受答案的经验。
  • @DWin 抱歉,直到现在才有机会检查线程。尽管这是我在脚本中最终使用的代码,但我删除了“已接受的答案”。
猜你喜欢
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
相关资源
最近更新 更多