ฉันกำลังทำการวิเคราะห์ที่ค่อนข้างง่ายซึ่งฉันได้ใส่ไว้ในฟังก์ชันกับไฟล์ทั้งหมดในโฟลเดอร์ใดโฟลเดอร์หนึ่ง ฉันสงสัยว่ามีใครมีเคล็ดลับที่จะช่วยฉันดำเนินการโดยอัตโนมัติในโฟลเดอร์ต่างๆ
- ประการแรกฉันสงสัยว่ามีวิธีอ่านไฟล์ทั้งหมดในโฟลเดอร์ใดโฟลเดอร์หนึ่งตรงไปที่ R หรือไม่ฉันเชื่อว่าคำสั่งต่อไปนี้จะแสดงรายการไฟล์ทั้งหมด:
files <- (Sys.glob("*.csv"))
... ซึ่งฉันพบจากการใช้ R เพื่อแสดงรายการไฟล์ทั้งหมดที่มีนามสกุลที่ระบุ
จากนั้นรหัสต่อไปนี้จะอ่านไฟล์เหล่านั้นทั้งหมดใน R
listOfFiles <- lapply(files, function(x) read.table(x, header = FALSE))
แต่ดูเหมือนไฟล์จะถูกอ่านเป็นรายการเดียวต่อเนื่องไม่ใช่แต่ละไฟล์…ฉันจะเปลี่ยนสคริปต์เพื่อเปิดไฟล์ csv ทั้งหมดในโฟลเดอร์ใดโฟลเดอร์หนึ่งเป็นดาต้าเฟรมแต่ละไฟล์ได้อย่างไร
ประการที่สองสมมติว่าฉันสามารถอ่านไฟล์ทั้งหมดแบบแยกกันได้ฉันจะทำฟังก์ชันบนดาต้าเฟรมเหล่านี้ทั้งหมดให้เสร็จสิ้นในครั้งเดียวได้อย่างไร ตัวอย่างเช่นฉันได้สร้างดาต้าเฟรมขนาดเล็กสี่แบบเพื่อที่ฉันจะได้แสดงสิ่งที่ฉันต้องการ:
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)))
ฉันยังสร้างฟังก์ชันตัวอย่าง:
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)}
โดยปกติฉันจะใช้คำสั่งต่อไปนี้เพื่อใช้ฟังก์ชันกับแต่ละดาต้าเฟรม
Df1.summary <-Summary (dfile)
มีวิธีแทนการใช้ฟังก์ชันกับดาต้าเฟรมทั้งหมดหรือไม่และใช้ชื่อเรื่องของดาต้าเฟรมในตารางสรุป (เช่น Df1.summary)
ขอบคุณมาก,
เคธี่
plyr::llply
(หรือldply
) แทนที่จะlapply
รักษาชื่อไว้ตลอดและกำหนดฟังก์ชันสรุปของฉันเองเช่นplyr::each(min, max, mean, sd, median)