我有一个数据列表作为大数据框架的一部分,它按时间排序,因此我无法更改列表的顺序:
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”的数量是拍卖 感谢
答案 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])))