我有一个以字符串编码的序列,但此序列中的一种步骤完全取决于前一步骤。
发生这种情况时,我想删除上一步。
例如,在这种情况下:
“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函数,但我不知道如何匹配逗号两边的前缀术语,并希望得到一些帮助。
*除了以下提出的观点之外;是的,会有许多不同的事件名称示例,而不仅仅是这两个被替换。
答案 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)]