2012-08-22 35 views
4

我想要一個新的分組,每次有5個獨特的水平R:分組因子每次n獨特的水平出現在數據中

例: 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)) 

編輯:關於數據的一些假設:

  • 水平得到數據後重復
  • 新的水平出現在數據後
  • 沒有固定在數據中排序
+0

起始層次是否始終如一? (例如,在這種情況下爲'cat'。) – A5C1D2H2I1M1N2O1R2T1

+0

@mrdwab在查看您的帖子之前,我正在編輯說明。沒有固定的_starting_級別。 – Jose

回答

4

在cums上使用modulo division 「新」的價值觀庵:

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

添加如果你想編號以1開始。如果它因素並添加它不會需要一個標籤時,才需要。

+0

+ 1個極好的解決方案!這解決了我在另一篇文章中提到的問題! – Jose

+0

嗯,這是一個很好的問題。當沒有足夠的獨特級別進行分組時會發生什麼?我希望它只有1個分組,但它看起來像是將代表按5分組。 – Jose

+0

我想在這種情況下它不起作用。 lselzers'也不認爲@ ttmaccer在較長的情況下工作,因爲他的第一個解決方案中的'!duplicated(dat $ varA)'表達式在第一個系列之後永遠返回FALSE,並且此測試用例對他的錯誤發出了錯誤第二種方案。 –