सबको सुप्रभात, मुझे एक समस्या है कि मुझे अपनी खोजों में कुछ भी नहीं मिला। खैर, मेरे पास उप-बेसिन के लिए तापमान डेटा (अधिकतम तापमान वाला एक और न्यूनतम तापमान वाला एक) के साथ 121 फाइलें (.txt) के साथ प्रत्येक में दो फ़ोल्डर हैं। डेटा में समान नाम और समान संख्या में लाइनें (13654) हैं। folder structure data structure

मैं इस डेटा को नामों से जोड़ना चाहता हूं, ताकि फाइलों में tmp min और tmp max का डेटा अल्पविराम से अलग हो।

new data struture

मैं इस पर एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण संलग्न नहीं करने के लिए अग्रिम रूप से क्षमा चाहता हूं, इसलिए मैं पैटर्न के साथ स्क्रीन संलग्न कर रहा हूं और डाउनलोड के लिए मूल डेटा का भी हिस्सा हूं।

डाउनलोड करने के लिए लिंक https://drive.google.com/file /d/1DdE1eWK0xf9XBRdocI-bN1flxDRggLVv/view?usp=sharing शुक्रिया

r
0
Herminio Sabino 26 मार्च 2020, 17:21

1 उत्तर

सबसे बढ़िया उत्तर

यहाँ एक डेटा.टेबल दृष्टिकोण है।

baseDir <- "~/ex/ex1/data_T/"
setwd(baseDir)
library(data.table)
files <- list.files(recursive=TRUE, pattern = "*.txt")
DT <- rbindlist(lapply(setNames(as.list(files), files), fread), idcol = "file")
DT[, `:=` (MinMax = factor(grepl("max", file), labels = c("min", "max")),
           p = as.numeric(gsub("(.*/p)([0-9]+)(.txt)", "\\2", file)))]
DT[, idx := 1:.N, by=list(p, MinMax)]
setkeyv(DT, c("p", "idx"))
DT <- dcast(DT[, -"file"],  p + idx ~ MinMax, value.var="V1", fun.aggregate = NULL)
DT
#>          p   idx        min        max
#>      1:  1     1 19800101.0 19800101.0
#>      2:  1     2       23.2       34.1
#>      3:  1     3       24.0       32.6
#>      4:  1     4       23.3       34.1
#>      5:  1     5       23.8       34.6
#>     ---                               
#> 216252: 16 13512       24.0       36.5
#> 216253: 16 13513       22.6       34.5
#> 216254: 16 13514       22.1       35.1
#> 216255: 16 13515       22.1       35.9
#> 216256: 16 13516       22.7       36.4
head(DT[, .(min, max)])
#>           min        max
#> 1: 19800101.0 19800101.0
#> 2:       23.2       34.1
#> 3:       24.0       32.6
#> 4:       23.3       34.1
#> 5:       23.8       34.6
#> 6:       23.2       33.9

## now you can save csv files
fwrite(DT[, .(min, max)], file = "MinMax.csv", col.names = FALSE)

## or write them out into separate files:
outfiles <- split(DT, DT$p)
lapply(seq_along(outfiles), function(x) fwrite(outfiles[[x]][, .(min, max)], file = paste0("MinMax_p", x, ".csv"), col.names = FALSE ))

2020-03-26 को reprex पैकेज (v0.3.0) ने बनाया

0
user12728748 26 मार्च 2020, 15:59