计算R中的不同值

时间:2016-12-25 18:31:04

标签: r count

我有一个数据列表作为大数据框架的一部分,它按时间排序,因此我无法更改列表的顺序:

ID <-  c("p","fxman27","duncane" ,"duncane" ,"dday1026" ,"duncane","dday1026","dday1026" ,"dday1026" ,"dday1026","cesandjoel","pali777","ranger_2","marymom6" , "deaglekl")

现在我需要一个函数来产生这些ID的计数:

 s<-c(1 , 2  ,3 , 3 , 4,  4  ,4 , 4 , 4  ,4 , 5,  6,  7,  8 , 9)

如您所见,不同ID的函数计数数,如果前一行中的ID相同则保持不变。 我不想使用“for”循环,而更喜欢BASE函数。

“s”不是简单的频率表,因为我知道我可以使用聚合。 这不是一个分组问题,但“当前Id”的数量是拍卖 感谢

2 个答案:

答案 0 :(得分:7)

您可以计算非重复ID:

cumsum(!duplicated(ID))
# [1] 1 2 3 3 4 4 4 4 4 4 5 6 7 8 9

答案 1 :(得分:1)

如果你的数据集很大,你可能最好使用dplyr,但这解决了只有基本函数的例子:

apply(as.matrix(1:length(ID)), 1, function(n) length(unique(ID[1:n])))