计算字符串中元素的连续出现

时间:2018-11-14 10:24:31

标签: r

昨天我问了类似的问题 Count each next occurence of string in substring 现在我在和另一个人苦苦挣扎:

apple.a > banana.b > banana.b > carrot-c > banana.b > apple.a > carrot-c > banana.b > apple.a

我想要实现的是检查连续出现的情况,所以结果应该是

apple.a1 > banana.b1 > banana.b2 > carrot-c1 > banana.b1 > apple.a1 > carrot-c1 > banana.b1 > apple.a1

我已经尝试了几种解决方案:

Count consecutive TRUE values within each block separately

Counting the number of occurrences of a value in R

R: count consecutive occurrences of values in a single column

仅列出其中的一些,但是似乎没有一个对我有用,并且我无法达到预期的效果。我试图将strsplitunlistsequencerle和其他几个功能组合在一起,但无法解决我的问题。

为了使事情更清晰:数据框有几列,单词序列存储在其中一列中。

1 个答案:

答案 0 :(得分:1)

将各个部分放在一起:这是my comment on your previous question和我的部分回答Count consecutive TRUE values within each block separately的组合。使用rleid包中的便捷功能rowiddata.table

两个长度不同的字符串的玩具数据:

s <- c("a > a > b > b > b > a > b > b", "c > c > b > b > b > c > c")

library(data.table)
lapply(strsplit(s, " > "), function(x) paste0(x, rowid(rleid(x)), collapse = " > "))
# [[1]]
# [1] "a1 > a2 > b1 > b2 > b3 > a1 > b1 > b2"
# 
# [[2]]
# [1] "c1 > c2 > b1 > b2 > b3 > c1 > c2"