我的文件名为
我想创建一个数据框,其中每一行都是从文件名中提取的信息,形式为作者,卷,问题。
我可以提取名称和数量,但似乎无法获取问题编号。使用“字符串”程序包,我完成了以下操作,这给了我_4
而不只是4
。
[^a-z](?:[^_]+_){0}([^_ ]+$)
我该如何解决?
答案 0 :(得分:1)
您正在寻找:
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
其中
string <- c("Hughson.George_54_4", "Ifran.Dean_51_3", "Houston.Amanda_49_6")
编辑: 您正在寻找:
read.table(text = string, sep ='_', fill=TRUE)
答案 1 :(得分:0)
如果是最后一位,我们可以使用base R
方法提取出来
as.numeric(substring(str1, nchar(str1)))
或与sub
as.numeric(sub(".*_", "", str1))
#[1] 4 3 6
如果我们需要将其拆分为单独的列,则一个选项是separate
中的tidyverse
,它将split
的列基于定界符(_
划分为单个列并确保列的类型为convert
ed
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
str1 <- c("Hughson.George_54_4", "Ifran.Dean_51_3", "Houston.Amanda_49_6")
答案 2 :(得分:0)
正则表达式的[^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"
尽管如此,您的总体目标似乎是strsplit
的工作:
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