programing

R 스크립트에서 Excel 파일 직접 읽기

instargram 2023. 4. 12. 21:46
반응형

R 스크립트에서 Excel 파일 직접 읽기

엑셀 파일을 R로 직접 읽으려면 어떻게 해야 하나요?아니면 먼저 데이터를 텍스트 또는 CSV 파일로 내보내고 해당 파일을 R로 Import해야 합니까?

@Chase가 추천한 내용을 다시 한 번 말씀드리겠습니다.XLConnect를 사용합니다.

XLConnect를 사용하는 이유는 다음과 같습니다.

  1. 크로스 플랫폼XLConnect는 Java로 작성되므로 R 코드 변경 없이 Win, Linux, Mac에서 실행됩니다(경로 문자열 제외).
  2. 로딩할 다른 것은 없습니다.XLConnect를 설치하고 인생을 즐기세요.
  3. Excel 파일 읽기만 언급했지만 XLConnect는 셀 포맷 변경을 포함한 Excel 파일도 씁니다.Win 뿐만 아니라 Linux 또는 Mac에서도 이 작업을 수행할 수 있습니다.

XLConnect는 다른 솔루션에 비해 다소 새로운 솔루션이기 때문에 블로그 투고 및 레퍼런스 문서에서 자주 언급되지 않습니다.저한테는 아주 유용했어요.

이제 읽기 작업이 있습니다.

readxl 패키지로 Excel에서 R로 데이터를 쉽게 가져올 수 있습니다.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")

설명에는 '외부 의존관계 없음'이라고 되어 있지만 패키지가 필요합니다.그러면 R의 외부 의존관계인 Rtools(Windows용) 또는 Xcode(OSX용)가 필요합니다.많은 사람들이 다른 이유로 설치를 하고 있지만요.

, R Wiki에서 관련 페이지를 참조하십시오.간단한 답변:read.xls gdata패키지는 대부분의 경우 작동합니다(Perl이 시스템에 설치되어 있어야 합니다.일반적으로 MacOS 및 Linux에서는 이미 설치되어 있지만 Windows에서는 추가 단계를 수행합니다(http://strawberryperl.com/) 참조).R Wiki 페이지에는 다양한 주의사항과 대체방안이 기재되어 있습니다.

이 작업을 직접 수행하지 않는 유일한 이유는 스프레드시트에 결함이 있는지(이상한 머리글, 여러 개의 워크시트(모두 루프할 수 있지만 한 번에 읽을 수 있는 것은 1개뿐), 포함된 플롯 등)를 확인하는 것이 좋습니다.단, 일반 숫자와 문자 데이터가 포함된 올바른 형식의 직사각형 스프레드시트(즉, 쉼표 형식의 숫자, 날짜, 0으로 나누어진 오차가 있는 공식, 결측값 등)의 경우 일반적으로 이 프로세스에 문제가 없습니다.

2015년 10월 편집:다른 사용자가 여기에 코멘트한 바와 같이 및 패키지는 보다 훨씬 더 빠릅니다.xlsx@ @Michael Chirico가 @Michael Chirico를 나타내는 Excel (1500년 120년)입니다.readxl더 '속도가 더 좋다'가 더 .openxlsx에 의해 됩니다.xlsx 수정할 2015년 Excel 파일을 선택하십시오.openxlsxxlsx.

2015년 이전 : 패키지를 사용한 적이 있습니다.엑셀과 R로 작업흐름을 바꿨습니다.Excel 시트를 .txt 형식으로 저장해도 되는지 묻는 성가신 팝업은 이제 없습니다.패키지는 Excel 파일도 씁니다.

나는 지,, 는는을 발견한다.read.xlsx엑셀을 사용하다 read.xlsx2함수는 상당히 빠르지만 data.frame 열의 벡터 클래스는 고려하지 않습니다. 쓰셔야 돼요.colClasses할 수 .read.xlsx2: here 를 들어 같습니다.하다

read.xlsx("filename.xlsx", 1)는 파일을 읽고 data.frame 컬럼클래스를 거의 유용하게 만들지만 대규모 데이터 세트에서는 매우 느립니다.에 대해서도 기능합니다..xlsfiles.complete files files files files files files files files.

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

에 엑셀 파일을 읽는 방법도 합니다.R여기에 수많은 답변이 있습니다.여기서 언급한 옵션 중 어떤 것이 가장 좋은지 설명하려고 합니다(심플한 상황에서).

쓰고 있다xlsx since since since since since since since since since since iR관성적인 측면에서는 어느 패키지가 더 잘 작동하는지에 대한 객관적인 정보가 없는 것 같습니다.

벤치마킹 연습은 어떤 패키지는 다른 패키지보다 특정 상황에 더 잘 대처할 수 있으며 다른 경고도 쏟아지기 때문에 어려움이 따릅니다.

즉, 상당히 일반적인 형식(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 」xlsx,openxlsx,readxl , , , , 입니다.gdata기본 옵션을 사용합니다(열 유형을 지정할지 여부 버전도 시도했지만 순위는 변경되지 않았습니다).

RODBCLinux를있기 를 사용하고 있기 때문에XLConnect 것이 엑셀 에, 되기 때문에, 엑셀은 Excel에 의한 것입니다.xlsReadWrite왜냐하면 그것은 더 이상 내 버전의 와 호환성이 없기 때문이다.R(무엇보다)

후 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★NN=1000L ★★★★★★★★★★★★★★★★★」NN=25000L.data.frameExcel excel excel excel excel excel excel excel excel excel excel excel excel excel excel 。 gc 용도가 됩니다.xlsx 피우지 않고결과는 다음.

1,000 행의 Excel 파일

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자, 자, 자, 자, 자, is, is, is로,openxlsx 및 쟁 compet compet 。gdata컬럼 최소값된 각 :

#       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

내 마음에 드는 걸 보면xlsxreadxl.

25,000 행의 Excel 파일

시간이 걸리기 때문에 큰 파일에서는 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속도면에서는 확실한 승자입니다. gdataExcel 파일을 읽는 속도가 매우 느리고 테이블이 클 때만 문제가 악화되기 때문에 다른 방법이 필요합니다.

of of of of twoopenxlsx1) 그 한 기타 메서드 (1) 「기타readxl단 한 가지 기능만을 하도록 설계되어 있습니다.이것은 아마도 그것이 매우 빠른 이유의 일부일 것입니다).특히,write.xlsx2) ('dism'의 중 하나2) ('dism'의 단점 중 하나) dism'의 단점)readxl의 개요col_types합니다.readxl글과 ) (비표준)을 R"text""character" ★★★★★★★★★★★★★★★★★」"date""Date".

XLConnect: http://cran.r-project.org/web/packages/XLConnect/index.html

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)

저는 개인적으로 RODDBC를 좋아해서 추천할 수 있어요.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.openxlsx늘늘시시시시시시그것은 정말 잘 작동했다.

http://cran.r-project.org/web/packages/openxlsx/index.html

또 다른 솔루션은 패키지입니다.이 패키지는 추가 설치가 필요하지 않지만 처음 사용하기 전에 다음과 같이 추가 shlib를 다운로드해야 합니다.

require(xlsReadWrite)
xls.getshlib()

이것을 잊어버리는 것은 완전한 좌절을 야기할 수 있다.거기 갔다 와서...

sidenote : 텍스트 기반 형식(csv 등)으로 변환하여 거기에서 읽어 들이는 것을 검토해 주십시오.여기에는 여러 가지 이유가 있습니다.

  • RODBC, gdata, xlsReadWrite)는 RODBC, gdata, xlsReadWrite입니다.특히 날짜는 다소 번거로울 수 있습니다.HFWutils엑셀(@Ben Bolker) 엑셀.

  • 만약 당신이 큰 시트를 가지고 있다면, 텍스트 파일에서 읽는 것이 엑셀에서 읽는 것보다 빠릅니다.

  • . 파일과 경우 할 수 .xls 파일과 .xlsx 파일의 경우 다른 솔루션이 필요할 수 있습니다.EG xlsReadWrite는 .xlsx AFIK입니다. gdata에서는 .xlsx 지원을 위해 추가 perl 라이브러리를 설치해야 합니다.패키지는 같은 이름의 확장자를 처리할 수 있습니다.

위의 많은 답변에서 언급했듯이 XLS/X 파일에 접속하여 합리적인 방법으로 데이터를 얻을 수 있는 좋은 패키지가 많이 있습니다. 어떤 .csv)하여 Excel에서 는 안 .하려면 , 「」를 합니다.=1/3을 사용법이제 볼 수 있는 소수점 수를 2로 줄이십시오.그런 다음 데이터를 복사하여 R에 붙여넣습니다.CSV ★★★★★★★★★★★★★★★★★」두 경우 모두 Excel은 인터페이스를 통해 볼 수 있는 데이터만 유용하게 보관하고 있으며 실제 소스 데이터의 정밀도가 모두 상실되었음을 알 수 있습니다.

@Mikko의 답변을 확대하면 칼럼 클래스를 미리 알 필요 없이 깔끔한 트릭을 사용하여 작업을 가속화할 수 있습니다. '만들기'를 사용하세요.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)))

Excel 파일은 다음과 같이 R에 직접 읽을 수 있습니다.

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

readxl 패키지를 사용하여 xls 및 xlxs 파일 읽기

library("readxl")
my_data <- read_excel("xxxxx.xls")
my_data <- read_excel("xxxxx.xlsx")

언급URL : https://stackoverflow.com/questions/6099243/read-an-excel-file-directly-from-a-r-script

반응형