如何解决如何根据向量的值更改 R 中 substr 函数的停止值?
我构建了一种根据向量中字符串的长度来确定子字符串的停止值的方法:这个想法是将所有字符保留在第二个破折号之前。并非所有数据集的字符数都相同。
textLength <- which(strsplit(data$`N° échantillon`,"")[[1]] == "-")[2] - 1
data$`N° échantillon` <- substr(data$`N° échantillon`,1,textLength)
问题是某些数据集中的文本长度也可能有所不同,因此我需要为每个条目调整 textLength
。
我试过这样的事情
substr(data$`N° échantillon`,which(strsplit(data[,"N° échantillon"],"") == "-")[2] - 1)
但我当然得到错误
data[,"N° échantillon"] 不是字符链
有没有办法在substr函数执行过程中访问数据的位置?
如评论所问:
输入可以是
N°échantillon | b | c |
---|---|---|
001-001-某事 | b | c |
001-002-某事 | b | c |
999-999-某事 | b | c |
001-0001-某事 | 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 -"
编辑:在这种情况下,在 OP 改编后导致:
data$`N° échantillon` <- gsub("^(.*?-.*?)-.*$","\\1",data$`N° échantillon`)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。