我的问题最好用快速简单的例子来解决:
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,因为香蕉第一次重复,等等。
能够计算字符串的重复次数,并将这些数据存储在相同长度的向量中,对我正在处理的事情有所帮助。但我不太确定一种快速,矢量化的方法来做到这一点。任何想法赞赏!
编辑:基本上我需要的是累积计数功能 - 我现在检查字符串是否存在。
答案 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