如何根据向量改变R中substr函数的停止值';s值多少?

如何根据向量改变R中substr函数的停止值';s值多少?,r,functional-programming,substr,strsplit,R,Functional Programming,Substr,Strsplit,我建立了一种根据向量中字符串的长度确定子字符串停止值的方法:其思想是将所有字符保留在第二个破折号之前。并非所有数据集的字符数都相同 textLength <- which(strsplit(data$`N° échantillon`, "")[[1]] == "-")[2] - 1 data$`N° échantillon` <- substr(data$`N° échantillon`, 1, textLength) 但我当然会出错 数据[

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

textLength <- which(strsplit(data$`N° échantillon`, "")[[1]] == "-")[2] - 1
data$`N° échantillon` <- substr(data$`N° échantillon`, 1, textLength)
但我当然会出错

数据[,“N°échantillon”]不是字符链

在执行substr函数期间,是否有方法访问数据的位置

有评论问:

输入可以是

Néchantillon B C 001-001-什么 B C 001-002-什么 B C 999-999-什么 B C 001-0001-什么 B C
您可以使用
regex

library(stringr)
stringr::str_extract("test - test2 - test3","^(.*?-.*)?-")
"test - test2 -"
编辑:在这种情况下,由OP改编后,将导致:

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

data$`N°échantillon`您能提供示例输入和输出吗?我想你要做的是:将子串添加到破折号“-”的第二个外观?是的。例如,输入可以是
001-0001-something
,输出可以是
001-0001
。通常,第二个破折号前的字符数仅在数据帧之间变化。例如,它可以是2个字符,一个破折号,5个字符,一个破折号等等。在某些数据帧中,其中的字符数会有所不同。通常,当我得到
99-9999-something
时,它后面会跟着
01-00001-something
。可能的重复尝试:
sapply(strsplit(x,“-”,fixed=TRUE),function(I)paste(I[1:2],collapse=“-”)
我修改了你的答案,但它的工作原理是这样的:
gsub((.-.-”),1,data$`Néchantillon`)
。非常感谢你!我的意思是gsub(“^(.*?-.*?).*$”,“\\1”,data$
N°échantillon
)。我将创建一个新答案,以清晰的方式详细说明。我不知道在验证后无法创建答案。下面是我想发布的内容:
data$`Néchantillon`@LéoZangelmi,谢谢,我会相应地编辑我的帖子
data$`N° échantillon` <- gsub("^(.*?-.*?)-.*$", "\\1", data$`N° échantillon`)