英文:
How do I name dataframes in a list in R after the CSV file they came from?
问题
我有一个名为“Results”的文件夹,其中包含CSV文件。它们的命名方案为“Sim_Results_x.csv”,其中x是第n次模拟。我想将它们转换为一个数据框列表,这些数据框的名称与它们被读取的文件名相同。例如,我希望Sim_Results_1.csv在数据框列表中被称为Sim_Results_1,而不是[[1]]。我尝试了下面的代码,但是它并没有以文件名命名数据框,而是将第一列命名为文件名,所有其他列都被命名为“NA”。我该如何解决这个问题?
英文:
I have a folder called "Results" with CSV files in it. The naming scheme of them is "Sim_Results_x.csv", where x is the nth simulation. I want to make these into a list of dataframes which are named after the file they were read in from. So for example, I want Sim_Results_1.csv to be called Sim_Results_1 in the list of dataframes, rather than [[1]]. I tried the code below but instead of naming the dataframe after the file, it names the first column after the file, and all other columns are named "NA." How could I fix this?
#get list of names of all files in results folder
filenames <- list.files("Results", pattern="*.csv", full.names=TRUE)
#sort them in numeric order
filenames <- mixedsort(filenames)
#combine into list of dataframes
ldf <- lapply(filenames, function(x) {
name <- tools::file_path_sans_ext(basename(x))
df <- read.csv(x)
names(df) <- name
# Return dataframe
df
})
答案1
得分: 0
你可以使用基本的R setNames()
函数。关键是你要将名称应用于列表,而不是列表中的每个项目。
ldf <- lapply(filenames, read.csv) |>
setNames(
tools::file_path_sans_ext(basename(filenames))
)
英文:
You can use the base R setNames()
function. The key point is that you are applying the names to the list, rather than to each item in the list.
ldf <- lapply(filenames, read.csv) |>
setNames(
tools::file_path_sans_ext(basename(filenames))
)
答案2
得分: 0
使用Map/read.csv,然后按照最后一行所示编辑列表名称。
library(tools)
ldf <- Map(read.csv, filenames)
names(ldf) <- file_path_sans_ext(basename(names(ldf)))
英文:
Use Map/read.csv and then edit the lists names as shown in the last line.
library(tools)
ldf <- Map(read.csv, filenames)
names(ldf) <- file_path_sans_ext(basename(names(ldf))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论