R 提取文本中下划线之间的数字

R 提取文本中下划线之间的数字,r,rstudio,special-characters,stringr,R,Rstudio,Special Characters,Stringr,我有一些文件的名字像 Hughson.George_54_4 Ifran.Dean_51_3 休斯顿,阿曼达,49,6 我想创建一个数据框,其中每一行都是以作者、卷、问题的形式从文件名中提取的信息 我能够提取名称和卷,但似乎无法获取发行号。使用“stringr”包,我完成了以下工作,这使我得到了\u4,而不仅仅是4 [^a-z](?:[^_]+_){0}([^_ ]+$) 如何修复此问题?如果它是最后一个数字,我们可以使用base R方法来提取它 as.numeric(substrin

我有一些文件的名字像

  • Hughson.George_54_4
  • Ifran.Dean_51_3
  • 休斯顿,阿曼达,49,6
我想创建一个数据框,其中每一行都是以作者、卷、问题的形式从文件名中提取的信息

我能够提取名称和卷,但似乎无法获取发行号。使用“stringr”包,我完成了以下工作,这使我得到了
\u4
,而不仅仅是
4

[^a-z](?:[^_]+_){0}([^_ ]+$)  

如何修复此问题?

如果它是最后一个数字,我们可以使用
base R
方法来提取它

as.numeric(substring(str1, nchar(str1)))
或使用
sub

as.numeric(sub(".*_", "", str1))
#[1] 4 3 6

如果我们需要将其拆分为单独的列,一个选项是
tidyverse
中分离
,该选项将
根据分隔符(
)将列拆分为单独的列,并确保列的类型为
转换

library(tidyverse)
data_frame(col1 = str1) %>%
    separate(col1, into = c("Author", "Volume", "Issue"), sep = "_", convert = TRUE)
# A tibble: 3 x 3
#  Author         Volume Issue
#  <chr>          <chr>  <chr>
#1 Hughson.George 54     4    
#2 Ifran.Dean     51     3    
#3 Houston.Amanda 49     6    
库(tidyverse)
数据帧(col1=str1)%>%
单独(col1,into=c(“作者”、“卷”、“发行”),sep=“”,convert=TRUE)
#一个tibble:3x3
#作者卷问题
#              
#1休森,乔治54 4
#2伊夫兰院长51 3
#3休斯顿阿曼达496
数据
str1您正在寻找:

read.table(text = string, sep ='_', col.names = c('Author', 'Volume', 'Issue'))

          Author Volume Issue
1 Hughson.George     54     4
2     Ifran.Dean     51     3
3 Houston.Amanda     49     6
 read.table(text = string, sep ='_', fill=TRUE)
在哪里

string <- c("Hughson.George_54_4", "Ifran.Dean_51_3", "Houston.Amanda_49_6")

正则表达式的
[^a-z]
部分与最后一个数字前面的
\
匹配。只需使用与末尾数字匹配的内容:

x1 <- c("Hughson.George_54_4", "Ifran.Dean_51_3", "Houston.Amanda_49_6")

str_extract(x1,"([^_]+$)")
[1] "4" "3" "6"

str_extract(x1,"\\d+$")
[1] "4" "3" "6"

您好,所有这些文件都在一个文件夹中,我正在阅读它们,所以大约有1303个文件<代码>apapers@darkpunk没问题。你可以通过
list.files
获得所有文件的名称,即
tools::file\u path\u sans\u ext(basename(lis.files())
哦,阅读不是问题,我们的教授告诉我们有某种方式,我坚持这种方式,但会尝试一下这种方法。这只是一个小问题,我似乎不明白为什么额外的-你会试图与此工作,并检查。谢谢你!是的,
separate
也做了这项工作。有很多种方法可以让你喜欢这一件事。惊人的帮助!是的,就是这样。只是一开始我需要建立一个语料库,从那时起我需要把它变成一个数据框架。是的,我已经创建了一个
my.text.location,然后在字符串的位置放置纸片,并运行出现错误的CodeTested<代码>扫描中的错误(file=file,what=what,sep=sep,quote=quote,dec=dec,:第703行没有3个元素
这也可以,太棒了!这似乎是一个解决方案。谢谢。是的,整个工作只是创建数据框,但我的教授希望我们创建这些对象,如“作者”、“卷”等,然后使用它们来创建数据框数据帧。
x1 <- c("Hughson.George_54_4", "Ifran.Dean_51_3", "Houston.Amanda_49_6")

str_extract(x1,"([^_]+$)")
[1] "4" "3" "6"

str_extract(x1,"\\d+$")
[1] "4" "3" "6"
data.frame(do.call("rbind",strsplit(sub("\\."," ",x1),"_")))
              X1 X2 X3
1 Hughson George 54  4
2     Ifran Dean 51  3
3 Houston Amanda 49  6