【发布时间】:2016-12-25 18:31:04
【问题描述】:
我有一个数据列表作为大数据框架的一部分,它是按时间排序的,所以我不能改变列表的顺序:
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”的数量是拍卖 谢谢
【问题讨论】:
-
使用
plyr包中的count函数。plyr::count(ID) -
试试
match(ID, unique(ID)) -
@JakeConway 这不会提供所需的输出
-
count 只是给了我频率。我已经有了频率,如果“ID”发生变化,我需要“s”向量作为变化,并保持不变,因为“ID”没有变化!
-
问题其实是重复的。
cumsum(!duplicated(ID))(@DavidArenburg 提供的链接中的答案)可以重现您的结果,但match(ID,unique(ID))不能,因为match函数不会检查具有较小下标的元素的重复项。