2010-08-03 39 views
13

Tôi đang sử dụng R để trực quan hóa một số dữ liệu trong đó có định dạng .txt. Có một vài trăm tệp trong một thư mục và tôi muốn tải tất cả vào một bảng, trong một lần chụp.Làm thế nào để bạn đọc nhiều tệp .txt vào R?

Bất kỳ trợ giúp nào?

EDIT:

Liệt kê các tệp không phải là vấn đề. Nhưng tôi gặp sự cố khi chuyển từ danh sách sang nội dung. Tôi đã thử một số các mã từ here, nhưng tôi nhận được một lỗi với phần này:

all.the.data <- lapply(all.the.files, txt , header=TRUE) 

nói

Error in match.fun(FUN) : object 'txt' not found 

Bất kỳ đoạn mã đó sẽ làm rõ vấn đề này sẽ được đánh giá rất nhiều.

+0

Vấn đề là 'txt' không phải là một hàm. Liên kết mà bạn đã trỏ đến là về hàm 'read.csv'. – Wok

Trả lời

4

Cảm ơn tất cả các câu trả lời!

Trong khi đó, tôi cũng tự mình tấn công một phương pháp. Hãy cho tôi biết nếu nó là bất kỳ hữu ích:

library(foreign) 

setwd("/path/to/directory") 

files <-list.files() 

data <- 0 


for (f in files) { 

tempData = scan(f, what="character") 

data <- c(data,tempData)  

} 
4

Nhìn vào trợ giúp cho các chức năng dir() aka list.files(). Điều này cho phép bạn nhận danh sách các tệp, có thể được lọc theo các biểu thức chính quy, mà bạn có thể lặp lại.

Nếu bạn muốn tất cả cùng một lúc, trước tiên bạn phải có nội dung trong một tệp. Một tùy chọn là sử dụng cat để nhập tất cả các tệp vào stdout và đọc rằng sử dụng popen(). Xem help(Connections) để biết thêm.

+0

cảm ơn, nhưng vẫn chưa rõ ràng. Kiểm tra chỉnh sửa của tôi :) –

+0

Vâng, tạo 'txt'. –

25

Bạn có thể thử này:

filelist = list.files(pattern = ".*.txt") 

#assuming tab separated values with a header  
datalist = lapply(filelist, function(x)read.table(x, header=T)) 

#assuming the same header/columns for all files 
datafr = do.call("rbind", datalist) 
+0

hơi sạch hơn: 'lapply (filelist, FUN = read.table, header = TRUE)' – RockScience

2

Có một cách thực sự, thực sự dễ dàng để làm điều này bây giờ: các readtext gói.

readtext::readtext("path_to/your_files/*.txt") 

Thực sự rất dễ dàng.

0

Có hai cách nhanh chóng để đọc nhiều file và đặt chúng vào một khung dữ liệu duy nhất hoặc data.table

Sử dụng fread từ data.table gói

# List all txt files including sub-folders 
    list_of_files <- list.files(path = ".", recursive = TRUE, 
          pattern = "\\.txt$", full.names = TRUE) 

    library(data.table) 

    # Read all the files and create a FileName column to store filenames 
    DT <- rbindlist(sapply(list_of_files, fread, simplify = FALSE), 
         use.names = TRUE, idcol = "FileName") 

Sử dụng purrr::map_dfreadr::read_table2 từ tidyverse gói:

library(tidyverse) 

    # Read all the files and create a FileName column to store filenames 
    df <- list_of_files %>% 
    set_names(.) %>% 
    map_df(read_table2, .id = "FileName") 

Lưu ý: để làm sạch tên tệp, hãy sử dụng các chức năng basename hoặc gsub

Các vấn đề liên quan