从R

时间:2017-03-31 11:45:50

标签: r string

我有一个以字符串编码的序列,但此序列中的一种步骤完全取决于前一步骤。

发生这种情况时,我想删除上一步。

例如,在这种情况下:

  

“alpha_i,bravo_i,alpha_i,alpha_c,charlie_i,bravo_i,bravo_c,   alpha_i,delta_c“

在* _i事件之后直接发生* _c事件的那些步骤,我希望删除* _i事件,所需的结果是:

  

“alpha_i,bravo_i, alpha_c ,charlie_i, bravo_c ,alphai_i,   delta_c“

换句话说,

  

“alpha_i,alpha_c”只是“alpha_c”

     

“bravo_i,bravo_c”只是“bravo_c”,

但我们不会更改“alpha_i,delta_c”,因为它们是不同的事件名称。

我认为语法会使用gsub函数,但我不知道如何匹配逗号两边的前缀术语,并希望得到一些帮助。

*除了以下提出的观点之外;是的,会有许多不同的事件名称示例,而不仅仅是这两个被替换。

1 个答案:

答案 0 :(得分:0)

试试这个:

wds <- c("alpha_i", "bravo_i", "alpha_i", "alpha_c", "charlie_i", "bravo_i", "bravo_c", "alpha_i", "delta_c")

wds[cumsum(rle(as.character(substr(wds, 1, gregexpr('_', wds))))$lengths)]

或者,如果您的向量长度为​​1,请尝试以下操作:

wds <- c("alpha_i, bravo_i, alpha_i, alpha_c, charlie_i, bravo_i, bravo_c, alpha_i, delta_c")
wds_split <- unlist(strsplit(wds, ', '))
wds_split[cumsum(rle(as.character(substr(wds_split, 1, gregexpr('_', wds_split))))$lengths)]