选择R中“-”之间的数字

jhiyze9q  于 2023-05-11  发布在  其他
关注(0)|答案(3)|浏览(89)

我有一个文件名为

gameofdice-017-1.txt

我想知道如何使用gsub只选择017?
这可能是一个重复的问题,但我很难找到答案。
任何帮助将不胜感激。

epfja78i

epfja78i1#

我们假设这里的一般情况是正好有两个负号和它们之间的一些数字。如果需要字符结果,则减号之间的字符可以是非数字。

**1)**使用带有减号分隔符的read.table,并选择第二个字段。如果你想要一个数字返回值,忽略colclasses=参数。

x <- "gameofdice-017-1.txt"
read.table(text = x, sep = "-", colClasses = "character")$V2
## [1] "017"

**2)**或使用sub匹配每个字段并将其替换为捕获组。如果需要字符结果“017”,请忽略as.numeric

as.numeric(sub(".*-(.*)-.*", "\\1", x))
## [1] 17

**3)**或修剪非负号的两端,然后修剪减号的两端。如上所述,如果需要字符结果,请删除as.numeric

as.numeric(trimws(trimws(x, whitespace = "[^-]"), whitespace = "-"))
## [1] 17

**4)**将each -替换为/,将其转换为路径,然后提取目录名,然后提取基名,基名是剩余路径的最后一部分。如果需要字符结果,请省略as.numeric。

as.numeric(basename(dirname(chartr("-", "/", x))))
## [1] 17

**5)**或提取捕获组(括号内匹配的部分)

library(gsubfn)
strapplyc(x, "-(.*)-", simplify = TRUE)
## [1] "017"

如果你想要一个数字结果

strapply(x, "-(.*)-", as.numeric, simplify = TRUE)
## [1] 17
5m1hhzi4

5m1hhzi42#

您可以使用捕获组:

x <- "gameofdice-017-1.txt"
value <- gsub("^[^-]+-([^-]+)-[^-]+$","\\1",x)

[^-]字符类匹配除-以外的任何字符。第二个[^-]+周围的括号(匹配一个或多个不等于-的字符)形成一个捕获组,\\1计算为第一个(也是唯一的)捕获组。
如果希望值为整数,可以将调用 Package 在as.integer(...)中。

wbgh16ku

wbgh16ku3#

下面是一个适用于数据包文件名处理的tidyverse解决方案:

library(dplyr)
library(stringr) 

c("gameofdice-017-1.txt", 
"gameofdice-018-1.txt") %>%
str_split("-")  %>%
lapply(FUN = function(x) x[2]) %>%
unlist

相关问题