【发布时间】:2020-07-18 16:01:04
【问题描述】:
我合并了一些本质上是 .txt 文件的文件,虽然称为 .sta。
在遇到基本 R apply 和 dplyr 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 <- 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 <- sapply(myfiles, read.table, header= TRUE, sep = "\t", skip = 5, simplify = FALSE, USE.NAMES = TRUE) names(dat_tab) <- stringr::str_extract(names(dat_tab), "(?<=GFREX)\\d+") binded1 = rbindlist(dat_tab, idcol = "files")。你能解释一下names函数是如何工作的,以及它是如何知道将名称放在新的 id 列中的吗
标签: r string loops multiple-columns filenames