Bir listeye veya ayrı bir veri çerçevesine içe aktarmam gereken 537 .txt dosyasına sahibim. Çok önemli olduğu için herhangi bir veri eklemek istemiyorum her şeyi ayrı tutmak için.Birden çok .txt dosyasını R'ye aktar ve gerçek veri satırlarına atla
Her dosyayı yeniden adlandırdım, bu nedenle dosya adlarının hepsi eşittir. Her dosyada, çok çeşitli bilgi içeren bir başlık bölümü vardır. Bu başlık bölümü, dosyaya bağlı olarak 12-16 satırdır. Veriler için 5 ile 7 sütunlarım var. Verilerin tümü sekmeyle ayrılmış. Sütun sayısı 5 ve 9 sütun arasında değişir ve sütunlar her zaman aynı sırada değildir, bu nedenle sütun adlarını veriyle içe aktarabilirim (sütun adları dosyalarda aynıdır). aşağıdaki gibi dosya biçimi şöyledir:
Üstbilgi
Üstbilgi
Üstbilgi
Üstbilgi ... en fazla 16 satır
((başlık ve sütun adları arasındaki boşlukların sayısı
Tarih (\ t) (\ t) dataCol1 (\ t) dataCol2 (\ t) dataCol3 (\ t) dataCol4
0)) değişir((sütun isimleri ve) arasında boş bir sıra)
/gg/yyyy (\ t) ss: dd: ss (\ t) birimi (\ t) birimi (\ t) birimi (\ t) birim
((birimleri ve veriler arasında 1 boş satır))
01/31/2016 (\ t) 14:32:02 (\ t) 14.9 (\ t) 25.3 (\ t) 15.8 (\ t) 25,6
(4000 satırlar için (veri tekrarlar))
ihtiyacım olanı özetlemek için: İçe dosyaların tümü bireysel d içine ata çerçeveleri veya veri çerçeveleri listesi. Üstbilgi bilgilerini "Tarih" ile satırın üzerine atlayın (ve muhtemelen satır ve boş satırdaki iki satırı silin) ve bir sonraki sütun adları ve aşağıdaki verileri içeren bir satır bırakın.
Kod için çalıştığım şeyin ham bir kopyası. Buradaki fikir, tüm dosyaları R'ye aktardıktan sonra, her dosyadaki 1-2 sütun için maksimum değeri belirler. Ardından, her dosya için 2 satır içeren her bir dosya için 2 satır içeren 2 satır olacak tek bir dosya verin.
Şu anda bildiğim##list files and create list for data.frames
path <- list.files("Path",pattern = NULL, all.files=FALSE,full.names=TRUE)
files <- list()
##Null list for final data to be extracted to
results <- NULL
##add names to results list (using file name - extension
results$name <- substr(basename(path),1,nchar(basename(Path))-4)
##loop to read in data files and calculate max
for(i in 1:length(path){
##read files
files[[i]] <- read.delim(path[[i]],header = FALSE, sep = "\t", skip = 18
##will have to add code:
##"if columnx exists do this; if columny exists do this"
##convert 2 columns for calculation to numeric
x.x <- as.numeric(as.character(files$columnx))
x.y <- as.numeric(as.character(files$columny))
##will have to add code:
##"if column x exists, do this....if not, "NA"
##get max value for 2 specific columns
results$max.x <- max(files$columnx)
results$max.y <- max(files$columny)
}
##add results to data frame
max <- data.frame(results)
##export to .csv
write.csv(max,file="PATH")
, benim kod sadece (maks yüzden bana zarar vermez 1 veya 2 satır atlama, dosyada sonradan çok kadar gelmiyor) verilerine geçmiş herşeyi atlar ve varsayar sütunlar her dosyada aynı sıradadır. Bu korkunç bir uygulama ve veri noktalarının yaklaşık% 5'inde bana kötü sonuçlar veriyor, ancak bunu doğru bir şekilde yapmak istiyorum. Başlıca endişem, verileri kullanılabilir bir biçimde R'ye almak. Sonra diğer hesaplamaları ve dönüşümleri ekleyebilirim. R için yeniyim ve 2 gün aradıktan sonra, herhangi bir foruma önceden gönderdiğim yardımı bulamadım.başlığının yapısı bir hat \ aşağıdaki n Satır \ N Data ve satır numarası için grep
kullanabilir varsayılarak
Yukarıdaki yaklaşımın iz üzerinde olduğu anlaşılıyor. Başlık bilgisi problemini çözmek için, benim yaklaşımım olacaktır (tüm detaylar olmadan): İlk 20 satırı <-readLines (yol [[i]], n = 20) ile okuyun. Tarih ile başlayan satırı bulmak için grep ("^ Tarih", başlık) kullanın. Ardından, sütun başlığı dizisi oluşturmak için "strsplit" öğesini kullanın. Grep komutunun sonuçlarından, verilerin başlangıç satırını hesaplayabilir ve bunu yukarıdaki read.delim hattınıza aktarabilirsiniz. İyi şanslar – Dave2e
Teşekkürler, Dave2e. @TJGorrie cevabını onun koduna ekledi, böylece ikiniz arasında, ben olduğumdan çok daha yakınım! – JRW485
Devam edildiğini duyduğuma sevindim. Sorun yaşadığınızda, güncellenmiş kodunuzla yeni bir soru ve daha fazla yardım için bazı örnek veriler yayınlayın. Forum, başlangıç noktasının bir örneğini ve istenen son noktayı görmeyi seviyor. – Dave2e