如何根据向量的值更改 R 中 substr 函数的停止值?

How to change the stop value of substr function in R depending of the vector's value?

我建立了一种方法来根据向量中字符串的长度确定子字符串的停止值:我的想法是保留第二个破折号之前的所有字符。所有数据集的字符数都不相同。

textLength <- which(strsplit(data$`N° échantillon`, "")[[1]] == "-")[2] - 1
data$`N° échantillon` <- substr(data$`N° échantillon`, 1, textLength)

问题是某些数据集中的文本长度也可能不同,因此我需要为每个条目调整 textLength

我试过这样的东西

substr(data$`N° échantillon`, 1, which(strsplit(data[,"N° échantillon"], "") == "-")[2] - 1)

但是我当然得到了错误

data[, "N° échantillon"] is not a character chain

有没有办法在 substr 函数执行期间访问数据的位置?

如评论所问:

输入可以是

N° échantillon b c
001-001-something b c
001-002-something b c
999-999-something b c
001-0001-something b c

输出将是

N° échantillon b c
001-001 b c
001-002 b c
999-999 b c
001-0001 b c

但实际代码会在最后一行给出 001-000|b|c。

您可以使用 regex:

library(stringr)
stringr::str_extract("test - test2 - test3","^(.*?-.*)?-")
"test - test2 -"

EDIT :在这种情况下,在 OP 改编后导致:

data$`N° échantillon` <- gsub("^(.*?-.*?)-.*$", "\1", data$`N° échantillon`)