在R中的向量中保持字符串外观的滚动计数

时间:2017-04-11 04:46:32

标签: r

我的问题最好用快速简单的例子来解决:

my_strings = c("apple", "banana", "carrot", "apple", "apple", "dairy", "banana", "eggplant", "flowers", "flowers", "apple", "banana")

my_repeats = c(0, 0, 0, 1, 2, 0, 1, 0, 0, 1, 3, 2)

通过my_strings元素从头到尾遍历一个元素,可以最好地理解my_repeats向量。由于苹果,香蕉和胡萝卜在首次访问时尚未出现在字符串中,因此它们都被分配为0.然后苹果出现第2次和第3次(第1次和第2次重复),因此得到1和2。然后0,因为乳制品尚未出现,然后1,因为香蕉第一次重复,等等。

能够计算字符串的重复次数,并将这些数据存储在相同长度的向量中,对我正在处理的事情有所帮助。但我不太确定一种快速,矢量化的方法来做到这一点。任何想法赞赏!

编辑:基本上我需要的是累积计数功能 - 我现在检查字符串是否存在。

3 个答案:

答案 0 :(得分:5)

ave seq_along函数可用于此:

as.numeric(ave(my_strings, my_strings, FUN = seq_along)) - 1
##  [1] 0 0 0 1 2 0 1 0 0 1 3 2

“data.table”中还有rowid函数:

library(data.table)
rowid(my_strings) - 1
##  [1] 0 0 0 1 2 0 1 0 0 1 3 2

答案 1 :(得分:0)

这是一个from datetime import datetime class Person: def __init__(self,day,month,year): self.day = day self.mon = month self.year = year def __repr__(self): if self.day < 10: day = "0" + str(self.day) else: day = str(self.day) if self.mon < 10: mon = "0" + str(self.mon) else: mon = str(self.mon) display = day + "-" + mon + "-" + str(self.year) return display def sortdates(l1): for dates in l1: date.finalbirthdate = datetime.strptime(str(print(dates)),"%d-%m-%Y") print (date.finalbirthdate) if __name__ == '__main__': p1 = Person(18,9,1984) print (p1) p2 = Person(13,1,1988) print (p2) sortdates([p1,p2]) 解决方案,用于数据框列中的字符串:

dplyr

答案 2 :(得分:0)

不是最简单的方法,但如果你想深入了解这个内部,你可以自己编程

mat <- apply(sapply(unique(my_strings), function(x) x == my_strings), 2, cumsum) - 1L
diag(mat[, my_strings])
#>  [1] 0 0 0 1 2 0 1 0 0 1 3 2