【问题标题】:Combine .txt files and add part of file name as new column value合并 .txt 文件并将文件名的一部分添加为新列值
【发布时间】:2020-07-18 16:01:04
【问题描述】:

我合并了一些本质上是 .txt 文件的文件,虽然称为 .sta。 在遇到基本 R applydplyr lapply 问题后,我使用以下代码将它们组合起来:

library(plyr)
myfiles <-  list.files(path="LDI files", pattern ="*.sta", full.names = TRUE) 
dat_tab <- ldply(myfiles, read.table, header= TRUE, sep = "\t",  skip = 5) 

我想添加一个列,该列的值是文件名的一部分。文件名示例为 "GFREX28-00-1" 和 "GFREX1534-00-1" 。我想在 GFREX 之后立即保留数字,在第一个破折号之前 -。

【问题讨论】:

  • 这是你想要的吗? dat_tab &lt;- sapply(myfiles, read.table, header= TRUE, sep = "\t", skip = 5, simplify = FALSE, USE.NAMES = TRUE),然后是 dplyr::bind_rows(dat_tab, .id = "file")。这会将表作为命名列表读取(其中名称等于文件名),然后将它们绑定在一起,将这些名称存储在一个名为“file”的新列中。
  • 谢谢。当我使用dplyr::bind_rows(dat_tab, .id = "file") 时出现错误Column `R..Kohm.` can't be converted from numeric to factor
  • 所以我尝试了dplyr::bind_rows(mutate_all(dat_tab, as.numeric), .id = "file") 并得到了错误no applicable method for 'tbl_vars' applied to an object of class "list"
  • 这工作dat_tab &lt;- sapply(myfiles, read.table, header= TRUE, sep = "\t", skip = 5, simplify = FALSE, USE.NAMES = TRUE) names(dat_tab) &lt;- stringr::str_extract(names(dat_tab), "(?&lt;=GFREX)\\d+") binded1 = rbindlist(dat_tab, idcol = "files")。你能解释一下names 函数是如何工作的,以及它是如何知道将名称放在新的 id 列中的吗

标签: r string loops multiple-columns filenames


【解决方案1】:

我不确定我是否正确理解了您的问题。我提供一个试探性的答案。这个想法是在返回之前为 data.frame 分配一个新列。

filepaths <-  list.files(path="LDI files", pattern ="*.sta", 
                          full.names = TRUE)
filesnames <-  list.files(path="LDI files", pattern ="*.sta", 
                          full.names = FALSE) 

dat_tab <- lapply(1:length(filepaths), function(i) {
    df <-  read.table(filepaths[i] header= TRUE, sep = "\t",  skip = 5)
             df$fn <- gsub("GFREX","",filesnames[i])
    df
}) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 2019-03-25
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多