如何从`read.table`命令中提取文件名的一部分并定义为新列

问题描述 投票:0回答:1

我正在寻找一种方法,在将该文件读入 R 时自动提取文件名的一部分并用它填充列。这是一个示例:

library(stringr)
df <- read.table("[MYPATH]/[email protected]", 
                 comment.char = "", header = FALSE, quote="", sep="\t", stringsAsFactors = F, encoding = "UTF-8") %>%
  mutate(Rec = str_extract(myFileNames[1], ".*\\d"))

但这之所以有效,只是因为我提前准备好了向量

myFileNames
以及所有相关的文件名,并且碰巧知道文件名
[email protected]"
是该向量中的第一个元素。

如何在不绕道外部向量的情况下获得相同的结果?

r stringr
1个回答
0
投票

正如我在评论中建议的那样(未经测试的代码):

readFileAndAddFileNameAsColumn <- function(fName) {
  read.table(
    fName, 
    comment.char = "", 
    header = FALSE, 
    quote="", 
    sep="\t", stringsAsFactors = F, encoding = "UTF-8"
  ) %>%
  mutate(Rec = str_extract(fName, ".*\\d"))
}

readFileAndAddFileNameAsColumn("[MYPATH]/[email protected]")

或者,如果您将

.id
传递给
bind_rows
,则可以使用
myFileNamesList
lapply
参数。类似的东西

lapply(
  myFileNamesList,
  read.table,
  comment.car = "",
  header = FALSE,
  quote = "",
  sep = "\t",
  stringsAsFactors = FALSE,
  encoding = "UTF-8"
) %>%
bind_rows(.id = "Rec")
© www.soinside.com 2019 - 2024. All rights reserved.