मेरे पास जनवरी 1996 से दिसंबर 2018 तक प्रत्येक माह के लिए समाचारों का एक डेटाफ़्रेम है, जिसका अर्थ है 264 डेटाफ़्रेम। उन सभी की संरचना समान है और मुझे उन्हें उसी तरह संशोधित करने की आवश्यकता है। उदाहरण के लिए, एक डेटाफ़्रेम के लिए मेरा कोड कमोबेश निम्न है:

#import data (only one column $V1)
News.9601 <- read.delim("D:/Reuters/1996/News.RTRS.199601.0210.txt.gz", header=FALSE,quote = "") 

#split the first columns in more variables
News.9601 = News.9601 %>% 
  mutate(v2=lapply(strsplit(as.character(V1), "\"mimeType\""), "[", 2))

#select only those news that include "R:"
news.9601=news.9601[grepl('R:',news.9601$v2),]


#select only those news that include certain "tags" in $v2

for(i in 1:30){
  tags_split1=paste(tags_split[[i]],collapse = "|")
  tags_split1=gsub("[[:space:]]", "", tags_split1)
  nam=paste("A", i, sep = "")

  assign(nam,news.9601[grepl(tags_split1,news.9601$v2,perl = T),]
         )
}
news.9601=rbind(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,
                 A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30)

news.9601=news.9601[!duplicated(news.9601),]

#Some text analysis, rx.app is a matching rule
news.9601 = news.9601 %>%
  mutate(approach <- regmatches(title_body, gregexpr(rx.app, v2, perl=TRUE)),
         approach=lengths(approach))

write.csv(news.9601, file = "news.9601.csv")
rm(news.9601)

डेटाफ़्रेम नाम "D:/Reuters/1996/News.RTRS.199601.0210.txt.gz" को छोड़कर, जिसमें वर्ष "/1996/" और फ़ाइल नाम दोनों को छोड़कर, मुझे हर महीने-डेटा के लिए यही करना है महीने और साल के हिसाब से बदलें।

क्या मेरे सभी महीनों-डेटा के लिए उपरोक्त कोड को 264 बार फिर से लिखने के बजाय लूप में आयात करने और चलाने का कोई तरीका है?

बहुत - बहुत धन्यवाद!

1
Esperanta 30 जुलाई 2019, 14:43

2 जवाब

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

कुछ इस तरह काम करना चाहिए

files <- list.files(path="folderpath/", full.names=TRUE, recursive=FALSE)

files एक-एक करके फाइल करने वाले लूप के बजाय, उस फोल्डर में सभी फाइल नामों को स्टोर करें

for (file in files){

 }
1
geekzeus 30 जुलाई 2019, 15:32

फ़ाइल की सूची का उपयोग करके आप यहां कोड का उपयोग कर सकते हैं।

Format_Funtion <- function(mypath, mylist) {
    mydata <- read.delim(paste0(mypath, mylist),header=FALSE,quote = "")

    #split the first columns in more variables
    mydata <- mydata %>% 
        mutate(v2=lapply(strsplit(as.character(V1), "\"mimeType\""), "[", 2))

    #select only those news that include "R:"
    mydata=mydata[grepl('R:',mydata$v2),]

    #select only those news that include certain "tags" in $v2
    for(i in 1:30){
        tags_split1=paste(tags_split[[i]],collapse = "|")
        tags_split1=gsub("[[:space:]]", "", tags_split1)
        nam=paste("A", i, sep = "")

        assign(nam,mydata[grepl(tags_split1,mydata$v2,perl = T),])
    }

    mydata=rbind(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,
             A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30)

    mydata=mydata[!duplicated(mydata),]

    #Some text analysis, rx.app is a matching rule
mydata = mydata %>%
        mutate(approach <- regmatches(title_body, gregexpr(rx.app, v2, perl=TRUE)),
           approach=lengths(approach))

    write.csv(mydata, file = paste0(sub(".txt.gz", "", mylist), ".csv"))
} 

यदि आवश्यक हो तो आप कोड की अंतिम पंक्ति में आउटपुट निर्देशिका के लिए पथ जोड़ सकते हैं।

mypath <- "D:/Reuters/1996/" 
mylist <- list.files(path=mypath, pattern="txt.gz$")
lapply(Format_Function, mypath, mylist) 
1
tom 30 जुलाई 2019, 16:02