R 스크립트에서 Excel 파일 직접 읽기
엑셀 파일을 R로 직접 읽으려면 어떻게 해야 하나요?아니면 먼저 데이터를 텍스트 또는 CSV 파일로 내보내고 해당 파일을 R로 Import해야 합니까?
@Chase가 추천한 내용을 다시 한 번 말씀드리겠습니다.XLConnect를 사용합니다.
XLConnect를 사용하는 이유는 다음과 같습니다.
- 크로스 플랫폼XLConnect는 Java로 작성되므로 R 코드 변경 없이 Win, Linux, Mac에서 실행됩니다(경로 문자열 제외).
- 로딩할 다른 것은 없습니다.XLConnect를 설치하고 인생을 즐기세요.
- 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 파일을 선택하십시오.openxlsx
xlsx
.
2015년 이전 : 패키지를 사용한 적이 있습니다.엑셀과 R로 작업흐름을 바꿨습니다.Excel 시트를 .txt 형식으로 저장해도 되는지 묻는 성가신 팝업은 이제 없습니다.패키지는 Excel 파일도 씁니다.
나는 지,, 는는을 발견한다.read.xlsx
엑셀을 사용하다 read.xlsx2
함수는 상당히 빠르지만 data.frame 열의 벡터 클래스는 고려하지 않습니다. 쓰셔야 돼요.colClasses
할 수 .read.xlsx2
: here 를 들어 과 같습니다.하다
read.xlsx("filename.xlsx", 1)
는 파일을 읽고 data.frame 컬럼클래스를 거의 유용하게 만들지만 대규모 데이터 세트에서는 매우 느립니다.에 대해서도 기능합니다..xls
files.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
기본 옵션을 사용합니다(열 유형을 지정할지 여부 버전도 시도했지만 순위는 변경되지 않았습니다).
RODBC
Linux를있기 를 사용하고 있기 때문에XLConnect
것이 엑셀 에, 되기 때문에, 엑셀은 Excel에 의한 것입니다.xlsReadWrite
왜냐하면 그것은 더 이상 내 버전의 와 호환성이 없기 때문이다.R
(무엇보다)
후 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★NN=1000L
★★★★★★★★★★★★★★★★★」NN=25000L
.data.frame
Excel 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
내 마음에 드는 걸 보면xlsx
readxl
.
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
속도면에서는 확실한 승자입니다. gdata
Excel 파일을 읽는 속도가 매우 느리고 테이블이 클 때만 문제가 악화되기 때문에 다른 방법이 필요합니다.
of of of of twoopenxlsx
1) 그 한 기타 메서드 (1) 「기타readxl
단 한 가지 기능만을 하도록 설계되어 있습니다.이것은 아마도 그것이 매우 빠른 이유의 일부일 것입니다).특히,write.xlsx
2) ('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
'programing' 카테고리의 다른 글
git 브랜치 이름을 붙이기 위해 일반적으로 사용되는 프랙티스의 예는 무엇입니까? (0) | 2023.04.17 |
---|---|
shell에서 source 명령을 찾을 수 없습니다. (0) | 2023.04.17 |
@synthe size는 정확히 어떤 역할을 합니까? (0) | 2023.04.12 |
다중 INSERT 문 대 다중 값을 가진 단일 INSERT (0) | 2023.04.12 |
VBA 코드로 IP 주소를 ping하고 결과를 Excel로 반환 (0) | 2023.04.12 |