将文件列表加载到R Dataframe

时间:2018-08-19 02:45:11

标签: r dataframe filenames

我正在处理目录中的所有文件,我想获取文件名的元数据,将其保存在数据框中,然后在处理目录后最终将数据框加载到RSQLite表中。

参考:https://stackoverflow.com/a/51913491/9410024,也许还有https://stackoverflow.com/a/45522323/9410024

我不明白警告消息以及为什么没有将文件名加载到数据框中:

setwd('C://tst//')
df <- data.frame("filename"= character(0), stringsAsFactors=FALSE)
for (fn in Sys.glob("tst*.dat")) {
    print(fn)
    df[nrow(df) + 1,] = list(fn)
}

输出:

[1] "tst1.dat"
[1] "tst2.dat"
[1] "tst3.dat"
Warning messages:
1: In `[<-.data.frame`(`*tmp*`, nrow(df) + 1, , value = list("tst1.dat")) :
  replacement element 1 has 1 row to replace 0 rows
2: In `[<-.data.frame`(`*tmp*`, nrow(df) + 1, , value = list("tst2.dat")) :
  replacement element 1 has 1 row to replace 0 rows
3: In `[<-.data.frame`(`*tmp*`, nrow(df) + 1, , value = list("tst3.dat")) :
  replacement element 1 has 1 row to replace 0 rows
> dfrun
[1] filename
<0 rows> (or 0-length row.names)
>

1 个答案:

答案 0 :(得分:0)

这里不需要增长数据帧或使用循环。

假设您有以下文件:

ls ~/tst/*.dat
# tst1.dat tst2.dat tst3.dat

您可以编写一个简单的R代码:

library(purrr)
library(dplyr) 

my_files <- Sys.glob(file.path("~", "tst", "*.dat"))
df <- data.frame(filename=my_files, stringsAsFactors = FALSE)

decode_files <- function(x) {
    # some function that processes a file
    lines <- readLines(x)
    substr(lines, 1, 5)
}

df %>% 
    mutate(output = map_chr(filename, decode_files))

哪个给你:

                    filename output
1 /Users/pedram/tst/tst1.dat  hfrsh
2 /Users/pedram/tst/tst2.dat  ifhju
3 /Users/pedram/tst/tst3.dat  fdnfd