R स्क्रिप्ट से सीधे एक्सेल फाइल पढ़ें


95

मैं आर में सीधे एक्सेल फाइल कैसे पढ़ सकता हूं? या क्या मुझे पहले डेटा को किसी टेक्स्ट- या CSV फ़ाइल में निर्यात करना चाहिए और उस फ़ाइल को R में आयात करना चाहिए?


@ साचा एप्सकैंप: xlsReadWrite के साथ, आपको पर्ल इंस्टॉल करने की भी आवश्यकता नहीं है।
जोरिस मेयस

1
gdataसंस्करण 2.8.2 समारोह के xlsxसाथ फाइलें पढ़ता हैread.xls
बेन

1
यदि आप Excel से पाठ प्रारूप में डेटा निर्यात करते हैं तो सटीक हानि के संबंध में मेरी चेतावनी (नीचे दिए गए उत्तर के रूप में) देखें।
रुसलपिएरेस 20

1
xlsxxlsx / xlsm / xls के लिए पैकेज, xlam आदि के बारे में नहीं जानते
Qbik

2
"मुझे पहले कभी टेक्स्ट फाइल को एक्सपोर्ट नहीं करने का कारण नहीं दिखता"। इसके बारे में कैसे: जब मैं सीएसवी को निर्यात करता हूं, तो मुझे जिन क्षेत्रों की आवश्यकता होती है उनमें से एक लिखा नहीं जाता है। यह किसी तरह का DRM लगता है, लेकिन जब से मैंने स्प्रेडशीट नहीं लिखी, मुझे नहीं पता।
नैट रीड

जवाबों:


41

हाँ। संबंधित पेज को आर विकी पर देखें । संक्षिप्त उत्तर: पैकेज read.xlsसे gdataअधिकांश समय काम होता है (हालांकि आपको अपने सिस्टम पर पर्ल इंस्टॉल करने की आवश्यकता होती है - आमतौर पर पहले से ही मैकओएस और लिनक्स पर सच है, लेकिन विंडोज पर एक अतिरिक्त कदम उठाता है, अर्थात देखें http://strawberryperl.com/ )। आर विकी पेज पर सूचीबद्ध विभिन्न कैविएट और विकल्प हैं।

एकमात्र कारण जो मैं सीधे ऐसा नहीं करता हूं, वह यह है कि आप स्प्रेडशीट की जांच कर सकते हैं कि यह देखने के लिए है कि इसमें ग्लिट्स (अजीब हेडर, कई वर्कशीट हैं [आप एक समय में केवल एक ही पढ़ सकते हैं, हालांकि आप स्पष्ट रूप से उन सभी पर लूप कर सकते हैं] , सहित भूखंड, आदि)। लेकिन एक अच्छी तरह से गठित, आयताकार स्प्रेडशीट सादे संख्याओं और वर्ण डेटा (यानी, अल्पविराम-स्वरूपित संख्या, दिनांक, विभाजन के साथ सूत्र-शून्य त्रुटियों, लापता मान, आदि) के लिए ..) मुझे आमतौर पर कोई समस्या नहीं है। इस प्रक्रिया के साथ।


6
विचार करने के लिए कई संभावित समस्याएं हैं कि मैं व्यक्तिगत रूप से भाग चुका हूं। अल्पविराम के साथ संख्या के साथ फ़ील्ड को छीनने की आवश्यकता है और आर। में फ़ील्ड्स को संख्यात्मक में परिवर्तित किया जाता है - "-" के साथ एनए को पुन: प्रेषित किया जाना चाहिए। कुल मिलाकर सिफारिश यह है कि वास्तव में एक्सेल में आपके नंबरों को देखें और यह सुनिश्चित करें कि उन्हें सही तरीके से आर में अनुवाद किया जा रहा है
ब्रैंडन बर्टेल्सन

3
"आपको वास्तव में अपनी संख्याओं को देखने की आवश्यकता है" के साथ बहस नहीं कर सकते ... ... "-" फ़ील्ड के साथ क्या समस्या है? na.strings="-"समस्या का समाधान करता है? इनमें से कितने मुद्दे जेनेरिक हैं और उनमें से कितने (जैसे कॉमा के साथ संख्यात्मक क्षेत्र) को अन्य उपकरणों जैसे कि XLConnect के साथ संबोधित किया जा सकता है ...?
बेन बोल्कर

1
उस टिप्पणी को ओपी को निर्देशित किया गया था, न कि आप बेन पर, खराब प्लेसमेंट के लिए मेरी गलती।
ब्रैंडन बर्टेल्सन

1
प्रासंगिक किस्सा: read.xlsएक एक्सेल फाइल से एक बहुत बड़ी शीट को पढ़ने में सफल होना, जहां दोनों XLConnectऔर xlsxअसफल (मुझे विश्वास है क्योंकि वे दोनों अपाचे POI पर भरोसा करते हैं )
मैट पार्कर

49

मुझे दोहराएं कि क्या @ चेक ने सिफारिश की: XLConnect का उपयोग करें ।

XLConnect का उपयोग करने के कारण, मेरी राय में हैं:

  1. क्रॉस प्लेटफॉर्म। XLConnect जावा में लिखा गया है और इस प्रकार, विन, लिनक्स, मैक पर आपके आर कोड के परिवर्तन के साथ नहीं चलेगा (संभवतः पथ स्ट्रिंग्स को छोड़कर)
  2. लोड करने के लिए और कुछ नहीं। बस XLConnect स्थापित करें और जीवन के साथ आगे बढ़ें।
  3. आपने केवल एक्सेल फ़ाइलों को पढ़ने का उल्लेख किया है, लेकिन XLConnect भी एक्सेल फाइलों को लिखेगा, जिसमें सेल फॉर्मेटिंग को बदलना शामिल है। और यह केवल विन नहीं बल्कि लिनक्स या मैक से करेगा।

XLConnect अन्य समाधानों की तुलना में कुछ नया है, इसलिए यह ब्लॉग पोस्ट और संदर्भ डॉक्स में कम बार वर्णित है। मेरे लिए यह बहुत उपयोगी रहा है।


48

और अब वहाँ है readxl :

रीडएक्सएल पैकेज एक्सेल से और आर में डेटा को प्राप्त करना आसान बनाता है। मौजूदा पैकेज (जैसे gdata, xlsx, xlsReadWrite आदि) की तुलना में रीडक्सल का कोई बाहरी निर्भरता नहीं है, इसलिए सभी ऑपरेटिंग सिस्टम को स्थापित करना और उपयोग करना आसान है। यह एक ही पत्रक में संग्रहीत सारणीबद्ध डेटा के साथ काम करने के लिए डिज़ाइन किया गया है।

readxl को libxls C लाइब्रेरी के ऊपर बनाया गया है, जो अंतर्निहित बाइनरी प्रारूप की कई जटिलताओं को दूर करता है।

यह दोनों विरासत .xls प्रारूप और .xlsx का समर्थन करता है

readxl CRAN से उपलब्ध है, या आप इसे github से स्थापित कर सकते हैं:

# install.packages("devtools")
devtools::install_github("hadley/readxl")

प्रयोग

library(readxl)

# read_excel reads both xls and xlsx files
read_excel("my-old-spreadsheet.xls")
read_excel("my-new-spreadsheet.xlsx")

# Specify sheet with a number or name
read_excel("my-spreadsheet.xls", sheet = "data")
read_excel("my-spreadsheet.xls", sheet = 2)

# If NAs are represented by something other than blank cells,
# set the na argument
read_excel("my-spreadsheet.xls", na = "NA")

ध्यान दें कि जब वर्णन 'कोई बाहरी निर्भरता नहीं' कहता है, तो इसके लिए Rcppपैकेज की आवश्यकता होती है , जिसके लिए Rtools (Windows के लिए) या Xcode (OSX के लिए) की आवश्यकता होती है, जो R के लिए बाहरी निर्भरता होते हैं । हालाँकि कई लोगों ने उन्हें अन्य कारणों से स्थापित किया है ।


3
Xlsx की तुलना में बहुत तेज। पढ़ें समय पढ़ने की तरह है। xlsx2, लेकिन यह प्रकार को प्रभावित करता है।
स्टीव रोव

1
@SteveRowe कुछ (प्रयास) उद्देश्य बेंचमार्क के लिए नया उत्तर देखें इसकी पुष्टि करते हैं
माइकलचिरिको

वहाँ का उपयोग कर कारकों के रूप में तार पढ़ने का एक तरीका है read_excel? मुझे तुलना में गति पसंद है read.xlsx, लेकिन तब मैन्युअल रूप से कॉलम को वर्णों से कारकों में परिवर्तित करना उद्देश्य को हरा देता है।
21

2
+1 इस तथ्य के लिए कि इसकी कोई निर्भरता नहीं है। मुझे जावा स्थापित करने से नफरत है। और मैंने इसकी कोशिश की है और यह मेरे लिए बहुत अच्छा काम करता है।
बास्तियन

2
readxl और openxlsx सबसे अच्छे हैं। readxl तेज है, लेकिन यह लिखने की अनुमति नहीं देता है। वैसे भी, कॉलम कक्षाओं / प्रकारों को निर्दिष्ट करने की कोशिश करते समय उनमें से कोई भी अच्छी तरह से काम नहीं करता है।
स्कैन

29

EDIT 2015-October: जैसा कि अन्य लोगों ने यहां टिप्पणी की है openxlsxऔर readxlपैकेज xlsxपैकेज की तुलना में बहुत तेज हैं और वास्तव में बड़ी एक्सेल फाइल (> 1500 पंक्तियों और> 120 कॉलम) को खोलने का प्रबंधन करते हैं। @MichaelChirico प्रदर्शित करता readxlहै कि गति पसंद होने पर बेहतर है और पैकेज openxlsxद्वारा प्रदान की गई कार्यक्षमता को बदल देता है xlsx। यदि आप 2015 में Excel फ़ाइलों को पढ़ने, लिखने और संशोधित करने के लिए पैकेज की तलाश कर रहे हैं, तो openxlsxइसके बजाय चुनें xlsx

2015 से पहले: मैंने xlsxपैकेज का उपयोग किया है । इसने एक्सेल और आर के साथ मेरे वर्कफ़्लो को बदल दिया। कोई और अधिक कष्टप्रद पॉप-अप नहीं पूछ रहा है, अगर मुझे यकीन है कि मैं अपने एक्सेल शीट को .txt प्रारूप में सहेजना चाहता हूं। पैकेज एक्सेल फाइल भी लिखता है।

हालाँकि, मुझे read.xlsxबड़ी Excel फ़ाइलें खोलते समय फ़ंक्शन धीमा लगता है । read.xlsx2फ़ंक्शन काफी तेजी से होता है, लेकिन डेटा.फ्रेम कॉलम के वेक्टर वर्ग को शांत नहीं करता है। colClassesयदि आप read.xlsx2फ़ंक्शन का उपयोग करते हैं , तो वांछित कॉलम कक्षाओं को निर्दिष्ट करने के लिए आपको कमांड का उपयोग करना होगा। यहाँ एक व्यावहारिक उदाहरण है:

read.xlsx("filename.xlsx", 1)आपकी फ़ाइल पढ़ता है और data.frame स्तंभ कक्षाओं को लगभग उपयोगी बनाता है, लेकिन बड़े डेटा सेट के लिए बहुत धीमा है। .xlsफाइलों के लिए भी काम करता है ।

read.xlsx2("filename.xlsx", 1)अधिक तेज़ है, लेकिन आपको स्तंभ कक्षाओं को मैन्युअल रूप से परिभाषित करना होगा। एक शॉर्टकट कमांड को दो बार चलाना है (नीचे उदाहरण देखें)। characterविनिर्देश आपके कॉलम को कारकों में परिवर्तित करता है। समय के लिए उपयोग Dateऔर POSIXctविकल्प।

coln <- function(x){y <- rbind(seq(1,ncol(x))); colnames(y) <- colnames(x)
rownames(y) <- "col.number"; return(y)} # A function to see column numbers

data <- read.xlsx2("filename.xlsx", 1) # Open the file 

coln(data)    # Check the column numbers you want to have as factors

x <- 3 # Say you want columns 1-3 as factors, the rest numeric

data <- read.xlsx2("filename.xlsx", 1, colClasses= c(rep("character", x),
rep("numeric", ncol(data)-x+1)))

25

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

xlsxजब से मैंने Rऔर कुछ भी नहीं किया है, तो मैं खुद का उपयोग कर रहा हूं , जड़ता के लिए उपयोग करना शुरू कर दिया है, और मैंने हाल ही में देखा है कि कोई भी वस्तुगत जानकारी नहीं लगती है कि कौन सा पैकेज बेहतर काम करता है।

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

उस ने कहा, मैं एक (प्रतिलिपि प्रस्तुत करने योग्य) डेटा सेट का उपयोग कर रहा हूं जो मुझे लगता है कि एक बहुत ही सामान्य प्रारूप (8 स्ट्रिंग फ़ील्ड, 3 संख्यात्मक, 1 पूर्णांक, 3 दिनांक) में है:

set.seed(51423)
data.frame(
  str1 = sample(sprintf("%010d", 1:NN)), #ID field 1
  str2 = sample(sprintf("%09d", 1:NN)),  #ID field 2
  #varying length string field--think names/addresses, etc.
  str3 = 
    replicate(NN, paste0(sample(LETTERS, sample(10:30, 1L), TRUE),
                         collapse = "")),
  #factor-like string field with 50 "levels"
  str4 = sprintf("%05d", sample(sample(1e5, 50L), NN, TRUE)),
  #factor-like string field with 17 levels, varying length
  str5 = 
    sample(replicate(17L, paste0(sample(LETTERS, sample(15:25, 1L), TRUE),
                                 collapse = "")), NN, TRUE),
  #lognormally distributed numeric
  num1 = round(exp(rnorm(NN, mean = 6.5, sd = 1.5)), 2L),
  #3 binary strings
  str6 = sample(c("Y","N"), NN, TRUE),
  str7 = sample(c("M","F"), NN, TRUE),
  str8 = sample(c("B","W"), NN, TRUE),
  #right-skewed integer
  int1 = ceiling(rexp(NN)),
  #dates by month
  dat1 = 
    sample(seq(from = as.Date("2005-12-31"), 
               to = as.Date("2015-12-31"), by = "month"),
           NN, TRUE),
  dat2 = 
    sample(seq(from = as.Date("2005-12-31"), 
               to = as.Date("2015-12-31"), by = "month"),
           NN, TRUE),
  num2 = round(exp(rnorm(NN, mean = 6, sd = 1.5)), 2L),
  #date by day
  dat3 = 
    sample(seq(from = as.Date("2015-06-01"), 
               to = as.Date("2015-07-15"), by = "day"),
           NN, TRUE),
  #lognormal numeric that can be positive or negative
  num3 = 
    (-1) ^ sample(2, NN, TRUE) * round(exp(rnorm(NN, mean = 6, sd = 1.5)), 2L)
)

मैं तो सीएसवी को यह लिखा था और लिब्रे ऑफिस में खोला गया और एक .xlsx फ़ाइल के रूप में यह बचा लिया, तो बेंचमार्क संकुल इस थ्रेड में उल्लिखित के 4: xlsx, openxlsx, readxl, और gdata, डिफ़ॉल्ट विकल्पों का उपयोग कर (मैं भी का एक संस्करण की कोशिश की कि क्या है या नहीं मैं कॉलम प्रकार निर्दिष्ट करें, लेकिन इससे रैंकिंग में बदलाव नहीं हुआ)।

मैं बाहर RODBCकर रहा हूँ क्योंकि मैं लिनक्स पर हूँ; XLConnectऐसा लगता है कि इसका प्राथमिक उद्देश्य एकल एक्सेल शीट में पढ़ना नहीं है, बल्कि पूरे एक्सेल वर्कबुक को आयात करना है, इसलिए अपने घोड़े को केवल पढ़ने की क्षमताओं पर दौड़ में शामिल करना अनुचित लगता है; और xlsReadWriteक्योंकि यह अब मेरे संस्करण के साथ संगत नहीं है R(लगता है कि इसे चरणबद्ध किया गया है)।

फिर मैंने एक्सेल फ़ाइल आकार के संबंध में मतभेदों की अनुमति देने के लिए बेंचमार्क NN=1000Lऔर NN=25000L( data.frameऊपर की प्रत्येक घोषणा से पहले बीज को रीसेट करना) चलाया । gcमुख्य रूप से है xlsx, जो मैंने कई बार पाया है कि मेमोरी क्लॉग बन सकता है। आगे की हलचल के बिना, यहां मुझे मिले परिणाम हैं:

1,000-पंक्ति एक्सेल फ़ाइल

benchmark1k <-
  microbenchmark(times = 100L,
                 xlsx = {xlsx::read.xlsx2(fl, sheetIndex=1); invisible(gc())},
                 openxlsx = {openxlsx::read.xlsx(fl); invisible(gc())},
                 readxl = {readxl::read_excel(fl); invisible(gc())},
                 gdata = {gdata::read.xls(fl); invisible(gc())})

# Unit: milliseconds
#      expr       min        lq      mean    median        uq       max neval
#      xlsx  194.1958  199.2662  214.1512  201.9063  212.7563  354.0327   100
#  openxlsx  142.2074  142.9028  151.9127  143.7239  148.0940  255.0124   100
#    readxl  122.0238  122.8448  132.4021  123.6964  130.2881  214.5138   100
#     gdata 2004.4745 2042.0732 2087.8724 2062.5259 2116.7795 2425.6345   100

तो प्रतिस्पर्धी और स्पष्ट हारने वाला readxlविजेता है । न्यूनतम कॉलम के सापेक्ष प्रत्येक उपाय करना:openxlsxgdata

#       expr   min    lq  mean median    uq   max
# 1     xlsx  1.59  1.62  1.62   1.63  1.63  1.65
# 2 openxlsx  1.17  1.16  1.15   1.16  1.14  1.19
# 3   readxl  1.00  1.00  1.00   1.00  1.00  1.00
# 4    gdata 16.43 16.62 15.77  16.67 16.25 11.31

हम अपने पसंदीदा देखते हैं, xlsxकी तुलना में 60% धीमी है readxl

25,000-रो एक्सेल फ़ाइल

समय की मात्रा के कारण, मैंने केवल 20 पुनरावृत्तियों को बड़ी फ़ाइल पर किया, अन्यथा कमांड समान थे। यहाँ कच्चे डेटा है:

# Unit: milliseconds
#      expr        min         lq       mean     median         uq        max neval
#      xlsx  4451.9553  4539.4599  4738.6366  4762.1768  4941.2331  5091.0057    20
#  openxlsx   962.1579   981.0613   988.5006   986.1091   992.6017  1040.4158    20
#    readxl   341.0006   344.8904   347.0779   346.4518   348.9273   360.1808    20
#     gdata 43860.4013 44375.6340 44848.7797 44991.2208 45251.4441 45652.0826    20

यहाँ सापेक्ष डेटा है:

#       expr    min     lq   mean median     uq    max
# 1     xlsx  13.06  13.16  13.65  13.75  14.16  14.13
# 2 openxlsx   2.82   2.84   2.85   2.85   2.84   2.89
# 3   readxl   1.00   1.00   1.00   1.00   1.00   1.00
# 4    gdata 128.62 128.67 129.22 129.86 129.69 126.75

तो readxlयह स्पष्ट विजेता है जब यह गति की बात आती है। gdataबेहतर कुछ और इसके लिए जा रहा है, क्योंकि यह एक्सेल फ़ाइलों को पढ़ने में काफी धीमी है, और यह समस्या केवल बड़ी तालिकाओं के लिए समाप्त हो गई है।

दो ड्रॉ openxlsx1 हैं) इसकी व्यापक अन्य विधियाँ ( केवल एक ही काम readxlकरने के लिए डिज़ाइन की गई है , जो शायद इसका हिस्सा है कि यह इतना तेज़ क्यों है), विशेष रूप से इसका कार्य, और 2) ( केवल इसके लिए एक और अधिक दोष ) में तर्क इस लेखन के) कुछ अमानक स्वीकार करता है : के बजाय और के बजाय ।write.xlsxreadxlcol_typesreadxlR"text""character""date""Date"


यह बहुत अच्छा होगा यदि आप XLConnect के लिए बेंचमार्क भी जोड़ते हैं। यह भी टिप्पणी करें कि readxl यह लिखने में सक्षम नहीं है। xlsx और openxlsx col_types या colClasses विकल्प के साथ ठीक से काम नहीं करते हैं।
स्कैन

@skan मैंने शुरू में कुछ परीक्षण चलाए XLConnectलेकिन यह बहुत धीमा है; मेरा मानना ​​है कि readxlकमियां मेरे अंतिम पैराग्राफ में पर्याप्त रूप से शामिल थीं; और मेरे पास आपके समान अनुभव नहीं है xlsxया openxlsxजैसा कि मैं नियमित रूप से दोनों प्रकारों को निर्दिष्ट करने के लिए उपयोग करता हूं।
माइकलक्रिको


13
library(RODBC)
file.name <- "file.xls"
sheet.name <- "Sheet Name"

## Connect to Excel File Pull and Format Data
excel.connect <- odbcConnectExcel(file.name)
dat <- sqlFetch(excel.connect, sheet.name, na.strings=c("","-"))
odbcClose(excel.connect)

निजी तौर पर, मुझे RODBC पसंद है और मैं इसकी सिफारिश कर सकता हूं।


7
कैविएट: ओडीबीसी कभी-कभी विंडोज के अलावा प्लेटफार्मों पर चलने के लिए मुश्किल हो सकता है।
JD लांग

1
@JD लॉन्ग और यहां तक ​​कि विंडोज़ पर भी यह एक PITA है। मेरे लिए कोई सेक्सी समय नहीं है और 64 बिट W7 पर ODBC ...
रोमन Luštrik

4
आवश्यक पैकेज लोड हो रहा है: RODBC odbcConnectExcel (file.name) में त्रुटि: odbcConnectExcel केवल 32-बिट विंडोज के साथ प्रयोग करने योग्य है
andrekos


6

एक अन्य समाधान xlsReadWriteपैकेज है, जिसके लिए अतिरिक्त इंस्टाल की आवश्यकता नहीं होती है, लेकिन इससे पहले कि आप इसका इस्तेमाल करते हैं, आपको अतिरिक्त श्लीब डाउनलोड करने की आवश्यकता होती है:

require(xlsReadWrite)
xls.getshlib()

इसे भूल जाने से पूरी तरह निराशा हो सकती है। वहाँ गया और वह सब ...

एक विचार पर: आप पाठ आधारित प्रारूप (जैसे सीएसवी) में परिवर्तित करने पर विचार करना चाहते हैं और वहां से पढ़ सकते हैं। यह कई कारणों से है:

  • जो भी आपके समाधान (RODBC, gdata, xlsReadWrite) कुछ अजीब चीजें हो सकती हैं जब आपका डेटा परिवर्तित हो जाता है। विशेष रूप से तिथियां बल्कि बोझिल हो सकती हैं। HFWutilsपैकेज एक्सेल दिनांक (प्रति @Ben Bolker की टिप्पणी) से निपटने के लिए कुछ उपकरण है।

  • यदि आपके पास बड़ी चादरें हैं, तो पाठ फ़ाइलों में पढ़ना EXCEL से पढ़ने से तेज है।

  • .xls और .xlsx फ़ाइलों के लिए, विभिन्न समाधान आवश्यक हो सकते हैं। उदाहरण के लिए xlsReadWrite पैकेज वर्तमान में .xlsx AFAIK का समर्थन नहीं करता है। gdataआपको .xlsx समर्थन के लिए अतिरिक्त पर्ल लाइब्रेरी स्थापित करने की आवश्यकता है। xlsxपैकेज उसी नाम के एक्सटेंशन को संभाल सकता है।


टिप के लिए @ Bx, मैं इसे अपने उत्तर में शामिल करूँगा। मैंने पूर्ण होने का प्रयास नहीं किया, क्योंकि विकी पृष्ठ के रूप में स्वीकृत उत्तर लिंक पहले से ही पूर्ण है। लेकिन इसमें HFWutils पैकेज का जिक्र नहीं है।
जोरिस मेयस

1
-1; मेरा जवाब देखिए। TL: DR: Excel सीएसवी (या क्लिपबोर्ड) के लिए एक पूर्ण परिशुद्धता डेटासेट नहीं बचाता है। केवल दृश्यमान मान बनाए रखा जाता है।
रुसेलपिएर्स 20

5

जैसा कि कई अन्य उत्तरों में ऊपर उल्लेख किया गया है, कई अच्छे पैकेज हैं जो XLS / X फ़ाइल से कनेक्ट होते हैं और डेटा को एक उचित तरीके से प्राप्त करते हैं। हालाँकि, आपको चेतावनी दी जानी चाहिए कि किसी भी परिस्थिति में आपको Excel से डेटा पुनर्प्राप्त करने के लिए क्लिपबोर्ड (या .csv) फ़ाइल का उपयोग नहीं करना चाहिए। यह देखने के लिए कि =1/3एक्सेल में सेल में प्रवेश क्यों करें । अब, आपको दिखाई देने वाले दशमलव बिंदुओं की संख्या घटाकर दो कर दें। फिर R में डेटा कॉपी और पेस्ट करें। अब CSV को सेव करें। आप दोनों ही मामलों में देखेंगे कि एक्सेल ने इंटरफ़ेस के माध्यम से आपको दिखाई देने वाले डेटा को केवल मदद के लिए रखा है और आपने अपने वास्तविक डेटा डेटा में सभी सटीकता खो दी है।


1
मुझे यह जानकर अच्छा लगेगा कि किसने सोचा कि संख्यात्मक निष्ठा प्रासंगिक / महत्वपूर्ण नहीं थी।
russellpierce

1
अच्छी चेतावनी। हालाँकि यह आपके द्वारा उपयोग किए जाने वाले पैकेज पर निर्भर करता है। कुछ इस जाल में नहीं पड़ रहे हैं।
रॉकसाइंस

@RocketScience यह एक्सेल द्वारा CSV निर्यात में एक मौलिक डिजाइन विकल्प है। क्या आपके पास उस पैकेज का एक उदाहरण है जो क्लिपबोर्ड का उपयोग करता है जिसमें यह समस्या नहीं है? Xls xlsx फ़ाइल को पार्स करने वाले पैकेज सीधे इस जाल में न आने के लिए प्रवण होंगे। इस प्रकार, मेरी चेतावनी की विशिष्ट स्कूपिंग।
रसेलपियरसी

यूनिक्स पर आप कोशिश कर सकते हैं gnumeric::read.gnumeric.sheet। विंडोज़ पर मुझे 100% यकीन नहीं है, लेकिन मुझे लगता है कि gdata::read.xlsइसे भी अच्छी तरह से काम करना चाहिए (हालांकि पर्ल को स्थापित करने की आवश्यकता है)
रॉकसाइंस

@RockScience सम्मानपूर्वक, gdata :: read.xls क्लिपबोर्ड डेटा पर काम नहीं करता है (जब तक कि आप अपने रास्ते से बाहर नहीं जाते हैं) और gnumeric Excel नहीं है। इसलिए, अनुपस्थित असाधारण सबूत, मेरी चेतावनी खड़ी है। इस सवाल के जवाब में कई अन्य अच्छे विकल्प हैं - चलो आशा करते हैं कि लोग इसके बजाय इसका उपयोग करते हैं।
रुसलपिएरेस

5

@ मायको द्वारा उपलब्ध कराए गए उत्तर पर विस्तार करते हुए आप अपने कॉलम कक्षाओं को समय से पहले "पता" किए बिना चीजों को गति देने के लिए एक साफ चाल का उपयोग कर सकते हैं। बस read.xlsxवर्गों को निर्धारित करने के लिए सीमित संख्या में रिकॉर्ड हथियाने के लिए उपयोग करें और फिर इसके साथ पालन करेंread.xlsx2

उदाहरण

# just the first 50 rows should do...
df.temp <- read.xlsx("filename.xlsx", 1, startRow=1, endRow=50) 
df.real <- read.xlsx2("filename.xlsx", 1, 
                      colClasses=as.vector(sapply(df.temp, mode)))

1
आपका समाधान रिटर्न numericके लिए factorsअपने कंप्यूटर पर। कारकों को निर्दिष्ट करने के लिए फ़ंक्शन में read.xlsxउपयोग करता है। मुझे यकीन है कि पात्रों के रूप में कारक प्राप्त करने का एक और अधिक सुंदर तरीका है, लेकिन यहां आपके फ़ंक्शन का एक संशोधित संस्करण है जो काम करता है :। characterreadColumnsdf.real <- read.xlsx2("filename.xlsx", 1, colClasses=gsub("factor", "character", as.vector(sapply(df.temp, class))))
मिकको

यह केवल इस हद तक काम करता है कि स्तंभ प्रकार को पहली पंक्ति द्वारा पर्याप्त रूप से निर्धारित किया जा सकता है। आमतौर पर एक व्यक्ति उस निर्धारण को करने के लिए पहली पंक्ति से अधिक पार्स करता है। इन कार्यों से आए पैकेज का नामकरण करके आआआ 90210 की टिप्पणी को संबोधित करने के लिए उत्तर को बेहतर बनाया जा सकता है।
रुसैलपिएरेस

1

एक एक्सेल फ़ाइल को निम्नानुसार सीधे आर में पढ़ा जा सकता है:

my_data <- read.table(file = "xxxxxx.xls", sep = "\t", header=TRUE)

रीडक्सल पैकेज का उपयोग करके xls और xlxs फ़ाइलों को पढ़ना

library("readxl")
my_data <- read_excel("xxxxx.xls")
my_data <- read_excel("xxxxx.xlsx")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.