通过在 R 中提取部分文件名来改变新列
Mutating new column by extracting parts of a file name in R
我在一个文件夹中有多个名称格式不同的 .xlsx 文件。我想将 R 中的一个新列变为以下格式:YYMMDD_wk#。以下是具有不同名称格式的三个文件的列表。唯一的区别是某些周被格式化为小数,例如 wk2.1
1.) 220128_B4_Height_performance_wk1
2.) 220204_SQ_Height_rerun_performance_plateD_wk44
3.) 220208_B4_Height_performance_noWeight_wk2.1
我只想要文件的第一部分和最后一部分,如 YYMMDD_wk# 所示。我的代码为新列提供了 NA。
performance <- list.file(path ="/Users/Desktop/performance", pattern= "*.xlsx", full.names=T) %>%
setNames(nm = .) %>%
lapply(read_excel) %>%
bind_rows(.id = "Week") %>%
mutate(Week = as.factor(str_extract(Week, "(\d+)_wk(\d+\.?\d*)")))
您可以使用此代码:
performance <- list("220128_B4_Height_performance_wk1", "220204_SQ_Height_rerun_performance_plateD_wk44" ,"220208_B4_Height_performance_noWeight_wk2.1")
第一个select第一个_
之前的所有内容:
first <- sub("\_.*", "", performance)
输出:
[1] "220128" "220204" "220208"
第二个 select 最后一个 _
之后的所有内容:
second <- sub('.+_(.+)', '\1', performance)
输出:
[1] "wk1" "wk44" "wk2.1"
最后使用此代码合并第一部分和第二部分:
paste(first, second, sep = "_")
输出:
[1] "220128_wk1" "220204_wk44" "220208_wk2.1"
使用stringr::str_replace_all()
:
library(stringr)
# example data with directories and file exts
Week <- c(
"dir\220128_B4_Height_performance_wk1.xlsx",
"dir\220204_SQ_Height_rerun_performance_plateD_wk44.xlsx",
"dir\220208_B4_Height_performance_noWeight_wk2.1.xlsx"
)
str_replace_all(basename(Week), "(\d*)_.*(_wk\d*)\..*", "\1\2")
#> [1] "220128_wk1" "220204_wk44" "220208_wk2"
由 reprex package (v2.0.1)
创建于 2022-03-14
解释:
basename()
删除文件名前的路径
(\d*)_.*
捕获第一个下划线之前的所有内容
(_wk\d*)\..*
通过第一个周期捕获 _wk#
"\1\2"
只保留那两个捕获的组。
我在一个文件夹中有多个名称格式不同的 .xlsx 文件。我想将 R 中的一个新列变为以下格式:YYMMDD_wk#。以下是具有不同名称格式的三个文件的列表。唯一的区别是某些周被格式化为小数,例如 wk2.1
1.) 220128_B4_Height_performance_wk1
2.) 220204_SQ_Height_rerun_performance_plateD_wk44
3.) 220208_B4_Height_performance_noWeight_wk2.1
我只想要文件的第一部分和最后一部分,如 YYMMDD_wk# 所示。我的代码为新列提供了 NA。
performance <- list.file(path ="/Users/Desktop/performance", pattern= "*.xlsx", full.names=T) %>%
setNames(nm = .) %>%
lapply(read_excel) %>%
bind_rows(.id = "Week") %>%
mutate(Week = as.factor(str_extract(Week, "(\d+)_wk(\d+\.?\d*)")))
您可以使用此代码:
performance <- list("220128_B4_Height_performance_wk1", "220204_SQ_Height_rerun_performance_plateD_wk44" ,"220208_B4_Height_performance_noWeight_wk2.1")
第一个select第一个_
之前的所有内容:
first <- sub("\_.*", "", performance)
输出:
[1] "220128" "220204" "220208"
第二个 select 最后一个 _
之后的所有内容:
second <- sub('.+_(.+)', '\1', performance)
输出:
[1] "wk1" "wk44" "wk2.1"
最后使用此代码合并第一部分和第二部分:
paste(first, second, sep = "_")
输出:
[1] "220128_wk1" "220204_wk44" "220208_wk2.1"
使用stringr::str_replace_all()
:
library(stringr)
# example data with directories and file exts
Week <- c(
"dir\220128_B4_Height_performance_wk1.xlsx",
"dir\220204_SQ_Height_rerun_performance_plateD_wk44.xlsx",
"dir\220208_B4_Height_performance_noWeight_wk2.1.xlsx"
)
str_replace_all(basename(Week), "(\d*)_.*(_wk\d*)\..*", "\1\2")
#> [1] "220128_wk1" "220204_wk44" "220208_wk2"
由 reprex package (v2.0.1)
创建于 2022-03-14解释:
basename()
删除文件名前的路径(\d*)_.*
捕获第一个下划线之前的所有内容(_wk\d*)\..*
通过第一个周期捕获 _wk#"\1\2"
只保留那两个捕获的组。