将文件名追加到R中的数据帧

将文件名追加到R中的数据帧,r,R,我想将文件名附加到我的表中,但它似乎没有真正起作用。 我所做的是迭代文件名列表,打开它们,将所有数据追加到一个数据帧,并为每个追加的文件添加其文件名。我希望它被附加到每一行上,以便稍后查看数据时,我可以知道给定行来自哪个文件。 但它似乎并没有像预期的那样发挥作用 data <- data.frame() for (file in files){ name = strsplit(file, split = "\\.")[[1]][1] data <- data %>%

我想将文件名附加到我的表中,但它似乎没有真正起作用。
我所做的是迭代文件名列表,打开它们,将所有数据追加到一个数据帧,并为每个追加的文件添加其文件名。我希望它被附加到每一行上,以便稍后查看数据时,我可以知道给定行来自哪个文件。
但它似乎并没有像预期的那样发挥作用

data <- data.frame()
for (file in files){

  name = strsplit(file, split = "\\.")[[1]][1]

  data <- data %>% bind_rows(read_delim(file = file, delim = ";", col_types = cols(
    a = col_double(),
    b = col_double(),
    )) %>% mutate(name = name))
}
数据%mutate(name=name))
}

我相信mutate函数应该已经完成了这个任务,显然,最终它们都具有相同的值。

当我们使用
tidyverse
时,一个选项是

library(readr)
library(purrr)
files_no_ext <- tools::file_path_sans_ext(files)
out <- imap_dfr(set_names(files, files_no_ext), ~ 
      read_delim(.x, delim = ";", 
         col_types = cols(a = col_double(),b = col_double()),
              .id = 'name')

在OP的
for
循环中

dat <- data.frame()
for (file in files){
     name <- tools::file_path_sans_ext(file)
     tmpdat <- read_delim(file = file, delim = ";", 
             col_types = cols(
                    a = col_double(),
                    b = col_double()
                      )) %>%
              mutate(name = name)
      dat <- rbind(dat, tmpdat)

 }

dat@akrun我错把它漏掉了。我正在分割文件。。我现在已经编辑了代码。示例albert.csv->name=albertI调整了我的代码,它正常工作。你认为第一种解决方案比第二种更快/更有效吗?@Croatihr我认为第一种解决方案更具可读性(主观),它会根据
.id
自动创建列,关于更快的选项,你可能必须尝试
fread
数据.tabl
rbindlist
dat <- data.frame()
for (file in files){
     name <- tools::file_path_sans_ext(file)
     tmpdat <- read_delim(file = file, delim = ";", 
             col_types = cols(
                    a = col_double(),
                    b = col_double()
                      )) %>%
              mutate(name = name)
      dat <- rbind(dat, tmpdat)

 }