e
Material newvar1
5000 4.28 > 5 > 5
5001 3 > 2 > 3 > 3
当我应用以下代码时
e$newvar2=sapply(str_extract_all(gsub("\\b(\\c+\\.\\c+)(?:\\s+>\\s+\\1\\b)+", "\\1", e$newvar1), "\\d+\\.\\d+"), paste, collapse=" > ")
我收到如下错误的输出
e
Material newvar1 newvar2
5000 4.28 > 5 4.28
5001 3 > 2 > 3 > 3 3 > 2 > 3
我需要像下面这样
e
Material newvar1 newvar2
5000 4.28 > 5 4.28 > 5
5001 3 > 2 > 3 > 3 3 > 2 > 3
答案 0 :(得分:1)
我们可以尝试使用str_replace_all
库中的stringr
。查找以下模式,然后通过替换为空字符串将其删除:
(\\d+(?:\\.\\d+)?) > (?=\\1)
这会匹配并捕获一个数字,也匹配后跟的>
符号。如果向前看,我们会看到相同的数字,然后删除整个前面的数字和>
分隔符。
也就是说,3 > 3
变成了3
。
x <- "3 > 2 > 3.28 > 3.28 > 1.5 > 1.5"
str_replace_all(x, "(\\d+(?:\\.\\d+)?) > (?=\\1)", "")
[1] "3 > 2 > 3.28 > 1.5"