Tôi đang thực hiện một phần phân tích tương đối đơn giản mà tôi đã đưa vào một hàm, trên tất cả các tệp trong một thư mục cụ thể. Tôi tự hỏi liệu có ai có bất kỳ mẹo nào để giúp tôi tự động hóa quy trình trên một số thư mục khác nhau không.
- Đầu tiên, tôi đã tự hỏi liệu có cách nào để đọc tất cả các tệp trong một thư mục cụ thể thẳng vào R. Tôi tin rằng lệnh sau sẽ liệt kê tất cả các tệp:
files <- (Sys.glob("*.csv"))
... mà tôi tìm thấy từ Sử dụng R để liệt kê tất cả các tệp có phần mở rộng được chỉ định
Và sau đó đoạn mã sau đọc tất cả các tệp đó thành R.
listOfFiles <- lapply(files, function(x) read.table(x, header = FALSE))
… Từ Thao tác nhiều tệp trong R
Nhưng các tệp dường như được đọc dưới dạng một danh sách liên tục chứ không phải các tệp riêng lẻ… làm cách nào tôi có thể thay đổi tập lệnh để mở tất cả các tệp csv trong một thư mục cụ thể dưới dạng khung dữ liệu riêng lẻ?
Thứ hai, giả sử rằng tôi có thể đọc tất cả các tệp một cách riêng biệt, làm cách nào để hoàn thành một chức năng trên tất cả các khung dữ liệu này trong một lần. Ví dụ: tôi đã tạo bốn khung dữ liệu nhỏ để tôi có thể minh họa những gì tôi muốn:
Df.1 <- data.frame(A = c(5,4,7,6,8,4),B = (c(1,5,2,4,9,1))) Df.2 <- data.frame(A = c(1:6),B = (c(2,3,4,5,1,1))) Df.3 <- data.frame(A = c(4,6,8,0,1,11),B = (c(7,6,5,9,1,15))) Df.4 <- data.frame(A = c(4,2,6,8,1,0),B = (c(3,1,9,11,2,16)))
Tôi cũng đã tạo một hàm ví dụ:
Summary<-function(dfile){
SumA<-sum(dfile$A)
MinA<-min(dfile$A)
MeanA<-mean(dfile$A)
MedianA<-median(dfile$A)
MaxA<-max(dfile$A)
sumB<-sum(dfile$B)
MinB<-min(dfile$B)
MeanB<-mean(dfile$B)
MedianB<-median(dfile$B)
MaxB<-max(dfile$B)
Sum<-c(sumA,sumB)
Min<-c(MinA,MinB)
Mean<-c(MeanA,MeanB)
Median<-c(MedianA,MedianB)
Max<-c(MaxA,MaxB)
rm(sumA,sumB,MinA,MinB,MeanA,MeanB,MedianA,MedianB,MaxA,MaxB)
Label<-c("A","B")
dfile_summary<-data.frame(Label,Sum,Min,Mean,Median,Max)
return(dfile_summary)}
Thông thường tôi sẽ sử dụng lệnh sau để áp dụng chức năng cho từng khung dữ liệu riêng lẻ.
Df1.summary <-Summary (dfile)
Có cách nào thay vì áp dụng hàm cho tất cả các khung dữ liệu và sử dụng tiêu đề của các khung dữ liệu trong các bảng tóm tắt (tức là Df1.summary).
Cảm ơn nhiều,
Katie
plyr::llply
(hoặcldply
) thay vìlapply
giữ nguyên các tên trong suốt và xác định chức năng tóm tắt của riêng mình, ví dụplyr::each(min, max, mean, sd, median)