将文件名追加到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)
}