如何将文件名作为列名

时间:2016-05-01 12:36:53

标签: r

实际上我在一个文件夹中有很多txt文件,然后我列出了一个列表然后将它们放在一起。到现在为止还挺好。可以说我有这样的文件名" 1a" " 1B" "图2a" "图3b"我从每个文件中得到一个列,并在最后创建一个数据框。

我现在不能做的是将文件名作为我最终数据框的列名。让我们说我从" 1a"我想在最终数据框中将其命名为1a。

无论如何都要这样做?

这是名字

> head(filelist)
[1] "./1a.txt" "./1b.txt" "./2a.txt" "./2b.txt" "./3a.txt" "./3b.txt"

1 个答案:

答案 0 :(得分:1)

你可能不想从数字开始,因为你的名字就是我的建议:

# create example vector of file names for example
myFiles <- c("./1a.txt", "./1b.txt", "./2a.txt", 
             "./2b.txt", "./3a.txt", "./3b.txt")
# get a vector of filenames
myFiles <- list.files(<filePath>)
# paste the word file in front:
myFiles <- paste0("file.", gsub("\\./(.*)\\.txt$", "\\1", myFiles))

# add names to your data.frame columns:
names(df) <- myFiles

正则表达式“\ ./(。*)\ .txt $”可细分如下:

  • \。告诉正则表达式引擎匹配文字点“。”在正则表达式中,“。”本身就是有用但又危险的“匹配任何角色。”
  • “/”和“txt”是文字:匹配这些字符。
  • “$”是一个强制匹配到字符串结尾的锚点。
  • “()”是一个捕获括号:它告诉引擎保存该部分以供日后使用。
  • “。*”在括号内表示匹配相邻(“\ ./”和“\ .txt $”)子表达式之间的任何内容。
  • “\ 1”表示返回捕获括号中的文本位。

有关正则表达式精彩世界的更多信息,请查看here。此外,这个链接在SO链接中的site是我学到很多东西的地方。

您必须确保名称的顺序和列的顺序相匹配,但是根据您的描述,听起来您已经拥有此功能。

如果包含文件的列表是命名列表,则事件应该更容易:

names(df) <- paste0("file.", names(fileList))