কোনও আর স্ক্রিপ্ট থেকে সরাসরি এক্সেল ফাইলটি পড়ুন


95

আমি সরাসরি একটি এক্সেল ফাইল কীভাবে পড়তে পারি? বা আমি কি প্রথমে কোনও পাঠ্য- বা সিএসভি ফাইলে ডেটা রফতানি করে সেই ফাইলটি আর-তে আমদানি করব?


@ সাছা এপসক্যাম্প: এক্সলস রিডড্রাইট সহ, আপনাকে পার্ল ইনস্টল করার দরকার নেই।
জোরিস মেয়েস

4
gdataসংস্করণ 2.8.2 ফাংশন xlsxসহ ফাইলগুলি পড়েread.xls
বেন

4
আপনি যদি এক্সেল থেকে কোনও পাঠ্য বিন্যাসে ডেটা রফতানি করেন তবে যথাযথতার সম্ভাব্য ক্ষতি সম্পর্কে আমার সতর্কতা (নীচের উত্তর হিসাবে দেখুন) দেখুন।
রাসেলপিয়েরস

4
xlsxএক্সএলএসএক্স / এক্সএলএসএম / এক্সএলএসের জন্য প্যাকেজ, এক্সএলএম ইত্যাদি সম্পর্কে জানেন না
কিউবিক

4
"আমি কখনই কোনও পাঠ্য ফাইলটিতে রফতানি না করার কারণ দেখি না"। এটি সম্পর্কে: যখন আমি সিএসভিতে রফতানি করি তখন আমার একটি ক্ষেত্রের প্রয়োজন হয় না। এটি একরকম ডিআরএমের মতো বলে মনে হচ্ছে তবে যেহেতু আমি স্প্রেডশিটটি লিখিনি তা আমার জানা নেই।
নেট রিড

উত্তর:


41

হ্যাঁ. আর উইকিতে সম্পর্কিত পৃষ্ঠাটি দেখুন । সংক্ষিপ্ত উত্তর: প্যাকেজ read.xlsথেকে gdataবেশিরভাগ সময় কাজ করে (যদিও আপনার সিস্টেমে পার্ল ইনস্টল করা দরকার - সাধারণত ম্যাকওএস এবং লিনাক্সের ক্ষেত্রে ইতিমধ্যে সত্য, তবে উইন্ডোজে একটি অতিরিক্ত পদক্ষেপ নেয়, দেখুন http://strawberryperl.com/ )। আর উইকি পৃষ্ঠায় তালিকাভুক্ত বিভিন্ন ক্যাভেট এবং বিকল্প রয়েছে।

আমি সরাসরি এটি না করতে দেখার একমাত্র কারণ হ'ল আপনি স্প্রেডশিটটি পরীক্ষা করতে চাইতে পারেন এতে গ্লিট রয়েছে কিনা (অদ্ভুত শিরোনাম, একাধিক ওয়ার্কশিট [আপনি কেবল একবারে এটি পড়তে পারবেন, যদিও আপনি অবশ্যই এগুলি সমস্তের উপর লুপ করতে পারেন] , অন্তর্ভুক্ত প্লট ইত্যাদি)। তবে সরল সংখ্যা এবং চরিত্রের ডেটা সহ সুগঠিত, আয়তক্ষেত্রাকার স্প্রেডশিটের জন্য (যেমন, কমা-ফর্ম্যাট সংখ্যা, তারিখগুলি, বিভাজন দ্বারা শূন্য ত্রুটিযুক্ত সূত্র, অনুপস্থিত মান ইত্যাদি .. ..) আমার সাধারণত কোনও সমস্যা নেই) এই প্রক্রিয়া দিয়ে।


6
বিবেচনা করার মতো অনেকগুলি সম্ভাব্য সমস্যা রয়েছে যে আমি ব্যক্তিগতভাবে প্রবেশ করেছি। কমাতে প্রয়োজনীয় সংখ্যার ক্ষেত্রগুলি আরে নাম্বারগুলিতে ছিনিয়ে নিতে হবে এবং রূপান্তর করতে হবে " সামগ্রিকভাবে সুপারিশটি হ'ল এক্সেলে আপনার সংখ্যাগুলি সত্যিই লক্ষ্য করা এবং নিশ্চিত করা যে সেগুলি আর
ব্র্যান্ডন বার্টেলসেন

4
"আপনার সত্যিই আপনার সংখ্যাগুলি দেখতে হবে" এর সাথে তর্ক করতে পারবেন না ... "-" ক্ষেত্রগুলির সাথে সমস্যাটি কী? নেই na.strings="-"সমস্যা মোকাবেলার? এই সমস্যাগুলির মধ্যে কতটি জেনেরিক এবং এর মধ্যে কতগুলি (উদাহরণস্বরূপ কমা সহ সংখ্যাযুক্ত ক্ষেত্রগুলি) এক্সএলকনেক্টের মতো অন্যান্য সরঞ্জামগুলির সাথে সম্বোধন করা যায় ...?
বেন বলকার

4
এই মন্তব্যটি ওপিকে নির্দেশিত হয়েছিল, আপনার কাছে বেন নয়, আমার খারাপ স্থান নির্ধারণের জন্য দোষ।
ব্র্যান্ডন বার্টেলসেন 23'11

4
প্রাসঙ্গিক গপ্প: read.xlsযেখানে উভয় এক্সেল ফাইল থেকে একটি খুব বড় শীট পড়া সফল XLConnectএবং xlsx(আমি বিশ্বাস করি, কারণ তারা উভয় উপর নির্ভর ব্যর্থ এ্যাপাচি থাকা POI )
ম্যাট পার্কার

49

@ চেসের প্রস্তাবিত যা পুনরাবৃত্তি করা যাক: এক্সএল সংযোগটি ব্যবহার করুন ।

এক্সএল কানেক্টটি ব্যবহার করার কারণগুলি আমার মতে:

  1. ক্রস প্ল্যাটফর্ম। এক্সএলসোনেক্টটি জাভাতে লেখা এবং এটি আপনার আর কোডের কোনও পরিবর্তন ছাড়াই উইন, লিনাক্স, ম্যাকে চলবে (সম্ভবত পাথ স্ট্রিং ব্যতীত)
  2. লোড করার মতো আর কিছু নেই। কেবলমাত্র এক্সএলসিঙ্কটি ইনস্টল করুন এবং জীবন নিয়ে এগিয়ে যান।
  3. আপনি কেবল এক্সেল ফাইলগুলি পড়ার কথা উল্লেখ করেছেন, তবে এক্সএলসনেক্ট সেল ফরম্যাটিং পরিবর্তন সহ এক্সেল ফাইলগুলিও লিখবে। এবং এটি লিনাক্স বা ম্যাক থেকে এটি করবে, কেবল উইন নয়।

এক্সএলসনেক্ট অন্যান্য সমাধানের তুলনায় কিছুটা নতুন তাই এটি ব্লগ পোস্ট এবং রেফারেন্স ডক্সে কম ঘন ঘন উল্লেখ করা হয়। আমার জন্য এটি খুব দরকারী হয়েছে।


48

এবং এখন রিডএক্সএল রয়েছে :

রিডএক্সএল প্যাকেজটি এক্সেল এবং আর এর মধ্যে ডেটা পাওয়া সহজ করে তোলে বিদ্যমান প্যাকেজগুলির তুলনায় (যেমন gdata, xlsx, xlsReadWrite ইত্যাদি) readxl এর কোনও বাহ্যিক নির্ভরতা নেই তাই সমস্ত অপারেটিং সিস্টেমে ইনস্টল করা এবং ব্যবহার করা সহজ। এটি একটি একক শীটে সঞ্চিত ট্যাবুলার ডেটা দিয়ে কাজ করার জন্য ডিজাইন করা হয়েছে।

readxl libxls সি লাইব্রেরির উপরে নির্মিত হয়েছে, যা অন্তর্নিহিত বাইনারি ফর্ম্যাটটির জটিলতার অনেকগুলি সরিয়ে দেয়।

এটি লিগ্যাসি .xls ফর্ম্যাট এবং .xlsx উভয় সমর্থন করে

রিডএক্সএল সিআরএন থেকে পাওয়া যায়, বা আপনি এটি দিয়ে গিথুব থেকে এটি ইনস্টল করতে পারেন:

# 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 (উইন্ডোজ) অথবা Xcode (জন্য ওএসএক্স), যা প্রয়োজন হয় আর যদিও বাহ্যিক নির্ভরতা অনেক মানুষ তাদের অন্যান্য কারণে ইনস্টল করা আছে ।


4
এক্সএলএক্সএক্সের চেয়ে অনেক দ্রুত। পঠনের সময়টি read.xlsx2 এর মতো, তবে এটি প্রকারভেদ করে।
স্টিভ রোয়ে

4
@ স্টিভরও কিছু (চেষ্টা করা) উদ্দেশ্য মানদণ্ডের জন্য এটির নতুন উত্তরটি দেখুন
মাইকেলচিরিকো

উপাদানগুলি ব্যবহার করে স্ট্রিংগুলি পড়ার কোনও উপায় আছে read_excel? আমি এর তুলনায় গতি পছন্দ করি read.xlsxতবে কলামগুলি অক্ষরে থেকে ফ্যাক্টরগুলিতে ম্যানুয়ালি রূপান্তরিত করে উদ্দেশ্যকে পরাস্ত করে।
21

4
এটির কোনও নির্ভরতা নেই এর জন্য +1। আমি জাভা ইনস্টল করতে পছন্দ করি না। এবং আমি এটি চেষ্টা করেছি এবং এটি আমার পক্ষে খুব ভাল কাজ করে।
বাসটিয়ান

4
রিডএক্সএল এবং ওপেনএক্সএলএক্স সেরা। readxl দ্রুত হয় তবে এটি লেখার অনুমতি দেয় না। যাইহোক, কলাম শ্রেণি / প্রকারগুলি নির্দিষ্ট করার চেষ্টা করার সময় এগুলির কোনওটিই ভাল কাজ করে না।
স্ক্যান 17

29

সম্পাদনা ২০১৫-অক্টোবর: অন্যরা এখানে যেমন মন্তব্য করেছেন openxlsxএবং readxlপ্যাকেজগুলি xlsxপ্যাকেজটির চেয়ে অনেক দ্রুত এবং প্রকৃতপক্ষে বৃহত্তর এক্সেল ফাইলগুলি খুলতে পরিচালনা করে (> 1500 সারি &> 120 কলাম)। @ মিশেলচিরিকো প্রদর্শন করে যে readxlগতি পছন্দ openxlsxকরা হলে xlsxপ্যাকেজ সরবরাহকারীর কার্যকারিতা প্রতিস্থাপন করা ভাল । আপনি যদি 2015 সালে এক্সেল ফাইলগুলি পড়ার, লেখার এবং সংশোধন করার জন্য কোনও প্যাকেজ সন্ধান করছেন তবে এর openxlsxপরিবর্তে চয়ন করুন xlsx

প্রাক-2015: আমি xlsxপ্যাকেজ ব্যবহার করেছি । এটি আমার কর্মপ্রবাহটি এক্সেল এবং আর এর সাথে পরিবর্তন করে No প্যাকেজটি এক্সেল ফাইলগুলিও লিখে দেয়।

যাইহোক, read.xlsxবড় এক্সেল ফাইলগুলি খোলার সময় আমি ফাংশনটি ধীর পাচ্ছি । read.xlsx2ফাংশনটি যথেষ্ট দ্রুত, তবে ডেটা.ফ্রেম কলামগুলির ভেক্টর শ্রেণিটি অনুমান করে না। আপনি colClassesযদি read.xlsx2ফাংশন ব্যবহার করেন তবে পছন্দসই কলামের ক্লাস নির্দিষ্ট করতে আপনাকে কমান্ডটি ব্যবহার করতে হবে। এখানে একটি বাস্তব উদাহরণ:

read.xlsx("filename.xlsx", 1)আপনার ফাইলটি পড়ে এবং ডেটা.ফ্রেম কলামের ক্লাসগুলি প্রায় দরকারী করে তোলে তবে বড় ডেটা সেটগুলির জন্য খুব ধীর। .xlsফাইলগুলির জন্যও কাজ করে।

read.xlsx2("filename.xlsx", 1)দ্রুততর, তবে আপনাকে ম্যানুয়ালি কলামের ক্লাস নির্ধারণ করতে হবে। একটি শর্টকাট হ'ল আদেশটি দু'বার চালানো (নীচের উদাহরণটি দেখুন) see 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)
)

আমি তখন CSV এই লিখেছিলেন এবং LibreOffice খোলা এবং .xlsx ফাইল হিসাবে এটি সংরক্ষণ করুন, তারপর benchmarked প্যাকেজ এই থ্রেড উল্লেখিত 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এক্সেল ফাইলগুলি পড়ার ক্ষেত্রে এটি বেদনাদায়কভাবে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে কমে যায় এবং এই সমস্যাটি কেবল বৃহত্তর টেবিলগুলির জন্যই বাড়িয়ে তোলে।

দুটি অঙ্কন হ'ল openxlsxএর 1) এর বিস্তৃত অন্যান্য পদ্ধতিগুলি ( কেবলমাত্র একটি কাজ readxlকরার জন্য ডিজাইন করা হয়েছে , এটি সম্ভবত এটি এত দ্রুত কেন এটির একটি অংশ), বিশেষত এটির কার্যকারিতা এবং 2) ( কেবলমাত্র হিসাবে একটি তর্ক ) এই লেখার) কিছু অমানুষ গ্রহণ করে : পরিবর্তে এবং পরিবর্তে ।write.xlsxreadxlcol_typesreadxlR"text""character""date""Date"


আপনি যদি XLConnect এর জন্য মাপদণ্ড যোগ করেন তবে দুর্দান্ত হবে। এছাড়াও মন্তব্য করুন যে readxl এটি লিখতে সক্ষম নয়। xlsx এবং ওপেনএক্সএলএক্স কল_ টাইপস বা কোলক্লাস বিকল্পের সাথে সঠিকভাবে কাজ করে না।
স্ক্যান

@ স্ক্যান আমি প্রথমে কিছু পরীক্ষা দিয়েছিলাম 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)

ব্যক্তিগতভাবে, আমি আরওডিসি পছন্দ করি এবং এটি সুপারিশ করতে পারি।


7
ক্যাভেট: ওডিবিসি কখনও কখনও উইন্ডোজ ব্যতীত অন্য প্ল্যাটফর্মগুলিতে চালিত হওয়ার জন্য জটিল হয়ে উঠতে পারে।
জেডি লং

4
@ জেডি লং এবং এমনকি উইন্ডোতে এটি পিটা। 64 বিট
ডাব্লু 7-এ

4
প্রয়োজনীয় প্যাকেজটি লোড হচ্ছে: ওডবসি কানেক্ট কান্টেল (ফাইল.নেম) এ রডডিসিবি ত্রুটি: odbcConnectExcel কেবল 32-বিট উইন্ডোজ
অ্যান্ড্রেকোস দিয়ে


6

আর একটি সমাধান হ'ল xlsReadWriteপ্যাকেজ, যার জন্য অতিরিক্ত ইনস্টলের প্রয়োজন নেই তবে প্রথমবার এটি ব্যবহারের আগে আপনাকে অতিরিক্ত শ্লিব ডাউনলোড করতে হবে:

require(xlsReadWrite)
xls.getshlib()

এটিকে ভুলে যাওয়া পুরোপুরি হতাশার কারণ হতে পারে। সেখানে ছিল এবং সব ...

সাইডেনোটে: আপনি একটি পাঠ্য-ভিত্তিক বিন্যাসে রূপান্তর করতে বিবেচনা করতে পারেন (যেমন সিএসভি) এবং সেখান থেকে পড়তে পারেন। এটি বিভিন্ন কারণে:

  • আপনার সমাধান যাই হোক না কেন (আরওডিসিবি, জিডিটা, এক্সএলস রিডওয়াইট) আপনার ডেটা রূপান্তরিত হওয়ার সাথে সাথে কিছু অদ্ভুত জিনিস ঘটতে পারে। বিশেষ করে তারিখগুলি বরং জটিল হতে পারে। HFWutilsপ্যাকেজ এক্সেল তারিখ (প্রতি @Ben Bolker এর মন্তব্য) সঙ্গে মোকাবেলা করতে কিছু সরঞ্জাম রয়েছে।

  • আপনার যদি বড় শিট থাকে তবে টেক্সট ফাইলগুলিতে পড়া EXCEL থেকে পড়ার চেয়ে দ্রুত।

  • .xls এবং .xlsx ফাইলগুলির জন্য, বিভিন্ন সমাধানের প্রয়োজন হতে পারে। EG xlsReadWrit প্যাকেজটি বর্তমানে .xlsx AFAIK সমর্থন করে না। gdata.xlsx সহায়তার জন্য আপনাকে অতিরিক্ত পার্ল লাইব্রেরি ইনস্টল করতে হবে। xlsxপ্যাকেজ একই নামের এক্সটেনশনগুলি পরিচালনা করতে পারে।


টিপসের জন্য @ বেন থেক্স, আমি এটি আমার উত্তরে অন্তর্ভুক্ত করব। আমি যদিও সম্পূর্ণ হওয়ার চেষ্টা করিনি, উইকি পৃষ্ঠা হিসাবে গৃহীত উত্তর লিঙ্কগুলি ইতিমধ্যে সম্পূর্ণ হয়ে গেছে। তবে এটি HFWutils প্যাকেজটির উল্লেখ করে না।
জোরিস মেয়েস

4
-1; আমার উত্তর দেখুন। টিএল: ডিআর: এক্সেল সিএসভিতে (বা ক্লিপবোর্ড) সম্পূর্ণ নির্ভুলতা ডেটাসেট সংরক্ষণ করে না। কেবল দৃশ্যমান মানগুলি বজায় রাখা হয়।
রাসেলপিয়েরস

5

অন্যান্য অনেক উত্তরে উপরে উল্লিখিত হিসাবে, অনেকগুলি ভাল প্যাকেজ রয়েছে যা XLS / X ফাইলের সাথে সংযোগ স্থাপন করে এবং যুক্তিসঙ্গত উপায়ে ডেটা পান। তবে আপনাকে সতর্ক করে দেওয়া উচিত যে কোনও অবস্থাতেই আপনার ক্লিপবোর্ড (বা একটি .csv) ফাইল এক্সেল থেকে ডেটা পুনরুদ্ধার করতে ব্যবহার করা উচিত নয়। কেন তা দেখতে =1/3এক্সেলের একটি ঘরে প্রবেশ করুন । এখন, দশমিক পয়েন্টগুলির জন্য আপনার দু'জনের কাছে দৃশ্যমান হ্রাস করুন। তারপরে ডেটা অনুলিপি করুন এবং এতে আটকান Now এখন CSV সংরক্ষণ করুন। আপনি উভয় ক্ষেত্রেই লক্ষ্য করবেন যে এক্সেলটি কেবল ইন্টারফেসের মাধ্যমে আপনার কাছে দৃশ্যমান ছিল এমন ডেটা রেখেছিল এবং আপনি আপনার আসল উত্সের ডেটাতে সমস্ত নির্ভুলতা হারিয়ে ফেলেছেন।


4
আমি জানি না কে ভেবেছিলেন যে সংখ্যার বিশ্বস্ততা প্রাসঙ্গিক / গুরুত্বপূর্ণ নয়।
রাসেলপিয়েরেস

4
ভাল সতর্কতা। তবে এটি আপনার ব্যবহৃত প্যাকেজের উপর নির্ভর করে। কেউ কেউ এই ফাঁদে পড়ছেন না।
রকসায়েন্স

@ রকেটসায়েন্স এটি এক্সেলের সিএসভি রফতানির একটি মৌলিক নকশা পছন্দ। আপনার কি ক্লিপবোর্ড ব্যবহার করে এমন কোনও প্যাকেজের উদাহরণ রয়েছে যাতে এই সমস্যাটি নেই? Xls xlsx ফাইল সরাসরি পার্স করার প্যাকেজগুলি এই ফাঁদে না পড়ার ঝুঁকিপূর্ণ হবে। সুতরাং, আমার সতর্কতা নির্দিষ্ট স্কোপিং।
রাসেলপিয়ের্স

ইউনিক্সে আপনি চেষ্টা করতে পারেন gnumeric::read.gnumeric.sheet। উইন্ডোজে আমি 100% নিশ্চিত নই তবে আমার মনে হয় gdata::read.xlsএটিও ভাল কাজ করা উচিত (যদিও পার্ল ইনস্টল করা দরকার)
রকসায়েন্স

@ রকসায়েন্স শ্রদ্ধার সাথে, gdata :: read.xls ক্লিপবোর্ড ডেটাতে পরিচালনা করে না (যতক্ষণ না আপনি নিজের পথ ছাড়েন) এবং জিনুমারিক এক্সেল নয়। সুতরাং, অনুপস্থিত অসাধারণ প্রমাণ, আমার সতর্কতা দাঁড়িয়েছে। এই প্রশ্নের জবাবে আরও অনেক ভাল বিকল্প রয়েছে - আসুন আশা করি যে লোকেরা পরিবর্তে সেগুলি ব্যবহার করে।
রাসেলপিয়ের্স

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)))

4
আপনার সমাধান ফেরৎ numericজন্য factorsআমার কম্পিউটারে। read.xlsxব্যবহারসমূহ characterমধ্যে readColumnsফাংশন কারণের উল্লেখ করতে। আমি নিশ্চিত সেখানে অক্ষর মতো বিষয়গুলির পেয়ে একটি মার্জিত উপায়, কিন্তু এখানে আপনার ফাংশনের একটি পরিবর্তিত সংস্করণ am যে কাজগুলো করেনঃ df.real <- read.xlsx2("filename.xlsx", 1, colClasses=gsub("factor", "character", as.vector(sapply(df.temp, class))))
মিক্কো

এটি কেবলমাত্র সেই সীমাতে কাজ করে যে কলামের ধরণটি প্রথম সারিতে যথাযথভাবে নির্ধারণ করা যেতে পারে। সাধারণত এই সংকল্পটি করার জন্য একজন প্রথম সারির চেয়ে বেশি পার্স করে। এই ক্রিয়াকলাপগুলি যে প্যাকেজটি এসেছে তা প্যাকেজের নাম দিয়ে Aaa90210 এর মন্তব্যে উত্তর দেওয়ার জন্য উত্তরটির উন্নতি করা যেতে পারে।
রাসেলপিয়ার্স

1

একটি এক্সেল ফাইলটি সরাসরি আর তে পড়তে পারে:

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

রিডএক্সএল প্যাকেজ ব্যবহার করে এক্সএলএস এবং এক্সএলএক্সএক্স ফাইলগুলি পড়া

library("readxl")
my_data <- read_excel("xxxxx.xls")
my_data <- read_excel("xxxxx.xlsx")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.