मैं कुछ समय के लिए पांडा डेटाफ्रेम के साथ काम करने के लिए अजगर का उपयोग कर रहा हूं। मैं उसी कोड को स्विच करना चाहता हूं जिसका उपयोग मैं आर पर कर रहा हूं। हालांकि, मुझे आर के साथ ज्यादा अनुभव नहीं है और मुझे यकीन नहीं है कि मेरे पास वही काम करने के लिए कौन से विकल्प हैं। मेरे पास कई सीएसवी फाइलों का एक फ़ोल्डर है, और मेरे पास उन फ़ाइल नामों की एक सूची है जिन्हें मैं फिर से चालू करना चाहता हूं और फाइलों का पूर्ण बाहरी जुड़ाव करना चाहता हूं।

पांडा में, मैं निम्न आदेश चलाऊंगा,

import pandas as pd
filelist = pd.read_excel("/Users/XXX/Documents/test/data/list.xlsx") #contains a list of filenames in the File column around 8000 rows long

workingdf = pd.DataFrame() #create a blank data frame

for subdir in filelist.File:
    df = pd.read_csv(f"/Users/XXX/Documents/test/data/{subdir}",index_col=0) #open file 2 columns named DATE and VALUE
    df = df.rename(columns={"VALUE":subdir}) #rename the value column to the file name
    workingdf = pd.merge(workingdf,df,how='outer',left_index=True,right_index=True)

कोड का अंतिम भाग डिक्शनरी के सभी डेटाफ़्रेम को एक पूर्ण बाहरी जुड़ाव का उपयोग करके एक बड़े डेटा फ़्रेम में मिला देता है।

मैं एक फ़ोल्डर में मौजूद सीएसवी फाइलों का एक गुच्छा लेना चाहता हूं, फ़ाइल नामों की एक सूची पर पुनरावृति करना चाहता हूं, फाइलों से डेटा टेबल बनाना चाहता हूं, और आर में एक बड़ी डेटा तालिका बनाने के लिए उन्हें एक-एक करके जोड़ना चाहता हूं।

मैं आर पर स्विच करने की कोशिश कर रहा हूं क्योंकि मैं स्मृति और दक्षता समस्याओं में भाग रहा हूं और किसी ने सुझाव दिया है कि मैं इसे आज़माता हूं।

मैं आर में एक ही निर्देश सेट कैसे चला सकता हूं? मुझे इसके साथ ज्यादा अनुभव नहीं है लेकिन मेरे पास अब तक निम्न कोड है।

library(openxlsx)
library(data.table)

filelist <- openxlsx::read.xlsx("/Users/XXX/Documents/test/data/list.xlsx")


for (row in filelist[1]){

}

मुझे पता है कि फ़ाइल का पथ बनाने और फ्रेम बनाने के लिए मुझे tempdf = read.csv(paste("/Users/XXX/Documents/test/data/",row,sep"")) का उपयोग करने की आवश्यकता है।

नाम बदलने का कार्य names(tempdf)[2]<-row की तर्ज पर होना चाहिए

मुझे यह भी पता है कि मुझे workingdf <- merge(workingdf,tempdf,by="DATE",all=TRUE) का उपयोग करना है

लेकिन मैं वास्तव में नहीं जानता कि इस पर कहां से शुरू किया जाए क्योंकि मैं पंडों की तरह एक खाली डेटाफ्रेम नहीं बना सकता और बस उन्हें मर्ज करना शुरू कर सकता हूं। कोई सुझाव?

1
anarchy 8 अप्रैल 2020, 00:31
 – 
bs93
8 अप्रैल 2020, 00:34
क्या होगा यदि मैं फ़ाइल नामों की अपनी सूची का उपयोग करना चाहता हूं?
 – 
anarchy
8 अप्रैल 2020, 00:36
और मुझे लगता है कि यह कोड पंक्ति-वार जोड़ता है, मैं कॉलम के अनुसार पूर्ण बाहरी शामिल होना चाहता हूं
 – 
anarchy
8 अप्रैल 2020, 00:39

2 जवाब

Csvs की सूची में पूर्ण बाहरी शामिल होने का एक उदाहरण

library(data.table)
#get list of csv in current folder
l <- list.files(pattern="(.*).csv")

#use data.table::fread to read them and then merge with all=TRUE for full outer join
#Reduce is a recursive function takes prev output to be merged with next input
Reduce(function(x, y) merge(x, y, by="DATE", all=TRUE), lapply(l, fread))
0
chinsoon12 8 अप्रैल 2020, 02:08
क्या होगा अगर मैं इसे अपनी सूची प्रदान करना चाहता हूं?
 – 
anarchy
8 अप्रैल 2020, 02:16
फिर l को अपनी सूची से बदलें
 – 
chinsoon12
8 अप्रैल 2020, 02:31
अगर मैं read.xlsx का उपयोग करता हूं तो क्या प्रारूप वही होगा? फ़ाइल नामों को निर्देशिका के साथ जोड़ने की आवश्यकता है
 – 
anarchy
8 अप्रैल 2020, 02:38
मुझे नहीं पता कि आपकी स्प्रेडशीट कैसी दिखती है। आप पूरे पथ के लिए full.names=TRUE तर्क का उपयोग कर सकते हैं। इसे आज़माएं और देखें कि आपको और क्या समस्याएं हैं क्योंकि अगर हमारे पास आपका डेटा नहीं है तो हम मदद करने में असमर्थ हैं
 – 
chinsoon12
8 अप्रैल 2020, 02:53

R में पढ़ी जाने वाली फ़ाइलों की सूची के लिए पूर्ण पथ फ़ाइल नाम बनाने के लिए paste0() या sprintf() जैसे R फ़ंक्शन का उपयोग कर सकते हैं। यहां एक उदाहरण दिया गया है जो पोकेमोन की पहली सात पीढ़ियों के लिए स्प्रेडशीट डाउनलोड करता है। , फ़ाइल को अनज़िप करता है, और प्रत्येक फ़ाइल को पढ़ने के लिए पथ नाम बनाने के लिए sprintf() का उपयोग करता है।

download.file("https://raw.githubusercontent.com/lgreski/pokemonData/master/PokemonXLSX.zip",
               "PokemonXLSX.zip",
               method="curl",mode="wb")
unzip("PokemonXLSX.zip")
library(readxl)
# create a set of numbers to be used to generate file names
# that have leading zeros, e.g. gen01.xlsx, gen02.xlsx, etc. 
generationIds <- 1:7
spreadsheets <- lapply(generationIds,function(x) {
     # use generation number to create individual file name
     aFile <- sprintf("./PokemonData/gen%02i.xlsx",x)
     data <- read_excel(aFile)
     })

एक आईडी वेरिएबल द्वारा फाइलों को मर्ज करने के लिए, कोई अन्य उत्तर में दिखाए गए अनुसार Reduce() फ़ंक्शन का उपयोग कर सकता है।

निम्न कोड दिखाता है कि फ़ाइल नाम कैसे बनाए जाते हैं।

theFiles <- lapply(generationIds,function(x) {
        # use generation number to create individual file name
        aFile <- sprintf("./PokemonData/gen%02i.xlsx",x)
        message(paste("current file is: ",aFile))
        aFile
})
0
Len Greski 8 अप्रैल 2020, 03:52