【问题标题】:Naming a dataframe like the path像路径一样命名数据框
【发布时间】:2020-04-05 08:11:49
【问题描述】:

我有很多需要标准化的 CSV。我为此创建了一个字典,到目前为止,我拥有的功能如下所示:

inputpath <- ("input")

files<- paste0(inputpath, "/", 
                 list.files(path = inputpath, pattern = '*.gz',
                            full.names = FALSE))

standardizefunctiontofiles = lapply(files, function(x){
    DF <- read_delim(x, delim = "|",  na="")
    names(DF) <- dictionary$final_name[match(names(DF), dictionary$old_name)]
})

不过,我遇到的问题是,当我读取 CSV 并将它们转换为数据框时,它们会丢失路径,因此我不能不将它们中的每一个都写为与输入名称匹配的 CSV。我通常会做的是:

output_name <- str_replace(x, "input", "output")
write_delim(x, "output_name", delim = "|")

我在想解决这个问题的一种方法是迈出这一步:

DF <- read_delim(x, delim = "|",  na="")

以便 DF 获取路径的名称,但我还没有找到任何解决方案。

关于如何解决这个问题以便能够应用一个函数并将它们中的每一个编写为标准化 CSV 的任何想法?

【问题讨论】:

    标签: r tidyverse standardized


    【解决方案1】:

    我不完全理解这个问题。但据我了解,您想用包含修改(和正确)数据框信息的新 CSV 文件覆盖正在读取的 CSV 文件。

    我认为你有两种选择

    选项 1) 读取数据时,将 CSV 存储为数据框,将路径存储为列表中的字符串。

    应该是这样的

    file_list <- list()
    
    for (i in seq_along(files)) {
      file_list[[i]] <- list(df = read_delim(files[[i]], delim = "|",  na = ""),
                             path = files[[i]])
    }
    

    然后,当您写入更正的数据帧时,您可以使用列表file_list 中列表的第二个元素中的路径。请注意,为了将路径作为字符串获取,您需要执行类似 file_list[[1]][["path"]]

    的操作

    选项 2) 使用assign

    for (i in seq_along(files)) {
       assign(files[[i]], read_delim(files[[i]], delim = "|",  na = ""))
    }
    

    选项 3) 使用 do.call 以及 &lt;- 是一个函数这一事实!

    for (i in seq_along(files)) {
       do.call("<-", list(files[[i]], read_delim(files[[i]], delim = "|",  na = "")))
    }
    

    希望对你有用!!

    NB)没有一个功能被尽可能高效地实现。他们只是介绍这个想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 2023-03-08
      • 2021-11-27
      相关资源
      最近更新 更多