根据 R 中重复的 counts/Subsetting 数据打破平局

Breaking ties based on repeated counts/Subsetting data in R

我正在尝试想出一种合理(如果不是很聪明)的方法来对某些数据进行子集化。假设当我从原始数据创建一个 table 时,它看起来像这样:

testdat <- data.frame(nom = c("A", "B", "C", "D", "E", "F", "G", "H", "I", 
"J", "K"), cts = c(100, 50, 35, 10, 10, 5, 4, 2, 1, 1, 1)) 

我的想法是把这里的前三个点之后的数据截下来(它们都有独特的name/count组合)然后把D、E、F、G点作为一组(它们是第一个)重复计数的组),然后点 I、J 和 K(重复计数的第二组)。以防万一不清楚我所说的“重复计数”是什么意思,我的意思是 E 和 F 之间没有区别,除了它们的名字——它们都在数据中出现了 10 次。

这不是搜索重复项(因为每一行都是唯一的),而是搜索(因为第二列中有重复计数)。我们可以假设顺序总是递减或重复;它永远不会增加(table 结果按降序排列)。

如何找到第一个 cts 重复 n 次的行(和行号)?

您可以通过以下操作获取包含第一个重复多次的值的行:

which(testdat$cts == rle(testdat$cts)$values[which(rle(testdat$cts)$lengths > 1)[1]])[1]
#> [1] 4

第一个重复三次的条目是

which(testdat$cts == rle(testdat$cts)$values[which(rle(testdat$cts)$lengths > 2)[1]])[1]
#> [1] 9

以及所有重复的行

which(duplicated(testdat$cts) | rev(duplicated(rev(testdat$cts))))
#> [1]  4  5  9 10 11