R Language
표 형식의 데이터를 일반 텍스트 파일로 읽고 쓰는 것 (CSV, TSV 등)
수색…
통사론
(파일, 헤더 = TRUE, sep = ",", quote = "" ", dec =". ", 채우기 = 참, comment.char =" ", ...)
read.csv2 (파일, 헤더 = TRUE, sep = ";", quote = "" ", dec =", ", 채우기 = TRUE, comment.char =" ", ...)
read_csv (file, col_names = TRUE, col_types = NULL, locale = default_locale (), na = c ( "", "NA"), comment = "", trim_ws = TRUE, skip = 0, n_max = -1 , progress = interactive ())
stringAsFactors = FALSE, verbose = getOption ( "datatable", "auto", nrows = -1L, header = "auto", na.strings = "NA" (기본값 : "integer") dec = if (sep! = "0"), 자동 시작 = 1L, 건너 뛰기 = 0L, select = NULL, drop = NULL, colClasses = NULL, integer64 = getOption ( "datatable.integer64" ( "datatable.showProgress"), # default : TRUE 데이터를 반환합니다. ",". ",". ", col.names, check.names = FALSE, 인코딩 ="알 수 없음 ", strip.white = TRUE, showProgress = getOption table = getOption ( "datatable.fread.datatable") #default : TRUE)
매개 변수
매개 변수 | 세부 |
---|---|
파일 | 읽을 CSV 파일의 이름 |
머리글 | logical : .csv 파일에 열 이름이있는 머리글 행이 포함되어 있습니까? |
끊다 | 문자 : 각 행의 셀을 구분하는 기호 |
인용문 | 문자 : 문자열을 인용하는 데 사용되는 기호 |
십 | 문자 : 소수 구분 기호로 사용되는 기호 |
가득 따르다 | logical : TRUE 일 때 길이가 다른 행은 빈 필드로 채워집니다. |
comment.char | character : csv 파일에서 주석으로 사용되는 문자입니다. 이 문자 앞에 오는 줄은 무시됩니다. |
... | read.table 전달할 추가 인수 |
비고
일반 텍스트 형식으로 내보내는 것은 넓은 이식성을 위해 변수 클래스와 같이 데이터에 인코딩 된 많은 정보를 희생합니다. 그러한 이식성이 필요없는 경우에는 .RData 또는 Feather 와 같은 형식이 더 유용 할 수 있습니다.
다른 유형의 파일에 대한 입력 / 출력은 Input 및 Output 에서 링크 된 다른 여러 주제로 다룹니다.
.csv 파일 가져 오기
기초 R을 사용하여 가져 오기
쉼표로 구분 된 값 파일 (CSV)은 read.csv
를 래핑하지만 sep = ","
를 사용하여 구분 기호를 쉼표로 설정하는 read.table
사용하여 가져올 수 있습니다.
# get the file path of a CSV included in R's utils package
csv_path <- system.file("misc", "exDIF.csv", package = "utils")
# path will vary based on installation location
csv_path
## [1] "/Library/Frameworks/R.framework/Resources/library/utils/misc/exDIF.csv"
df <- read.csv(csv_path)
df
## Var1 Var2
## 1 2.70 A
## 2 3.14 B
## 3 10.00 A
## 4 -7.00 A
사용자 친화적 인 옵션 인 file.choose
를 사용하면 디렉토리를 탐색 할 수 있습니다.
df <- read.csv(file.choose())
노트
-
read.table
과 달리,read.csv
기본적으로header = TRUE
로 설정하고 첫 번째 행을 열 이름으로 사용합니다. - 이 모든 함수는
as.is = TRUE
또는stringsAsFactors = FALSE
아니면 기본적으로 문자열을factor
클래스로 변환stringsAsFactors = FALSE
. -
read.csv2
변형의 기본값은sep = ";"
쉼표를 소수점으로 사용하고 세미콜론을 필드 구분자로 사용하는 국가의 데이터에 사용하려면dec = ","
패키지를 사용하여 가져 오기
readr
패키지의 read_csv
함수는 훨씬 빠른 성능, 대용량 파일의 진행률 막대 및 stringsAsFactors = FALSE
포함하여 표준 read.csv
보다 많이 사용되는 기본 옵션을 제공 stringsAsFactors = FALSE
.
library(readr)
df <- read_csv(csv_path)
df
## # A tibble: 4 x 2
## Var1 Var2
## <dbl> <chr>
## 1 2.70 A
## 2 3.14 B
## 3 10.00 A
## 4 -7.00 A
data.table로 가져 오기
data.table
패키지는 fread
함수를 소개합니다. read.table
과 비슷하지만 일반적으로 fread
는 파일의 구분 기호를 자동으로 추측하여 더 빠르고 유연합니다.
# get the file path of a CSV included in R's utils package
csv_path <- system.file("misc", "exDIF.csv", package = "utils")
# path will vary based on R installation location
csv_path
## [1] "/Library/Frameworks/R.framework/Resources/library/utils/misc/exDIF.csv"
dt <- fread(csv_path)
dt
## Var1 Var2
## 1: 2.70 A
## 2: 3.14 B
## 3: 10.00 A
## 4: -7.00 A
인수 input
은 다음을 나타내는 문자열입니다.
- 파일 이름 ( 예 :
"filename.csv"
), - 파일 ( 예 :
"grep 'word' filename"
)에서 작동하는 쉘 명령 또는 - 입력 자체 ( 예 :
"input1, input2 \n A, B \n C, D"
).
fread
클래스의 객체를 반환 data.table
클래스에서 상속 data.frame
의 data.table의 사용과 함께 사용하기에 적합 []
. 일반 data.table
을 반환하려면 data.table
매개 변수를 FALSE
설정 FALSE
.
df <- fread(csv_path, data.table = FALSE)
class(df)
## [1] "data.frame"
df
## Var1 Var2
## 1 2.70 A
## 2 3.14 B
## 3 10.00 A
## 4 -7.00 A
노트
-
fread
에는read.table
과 동일한 옵션이read.table
. 한 가지 빠진 인수는na.comment
입니다. 소스 파일에#
있으면 원치 않는 동작이 발생할 수 있습니다. -
fread
단지 사용"
에 대한quote
매개 변수입니다. -
fread
는 변수 유형을 추측하기 위해 몇 줄을 사용합니다.
.tsv 파일을 행렬로 가져 오기 (기본 R)
많은 사람들이 파일 경로를 만들 때 file.path
사용하지 않습니다. 그러나 Windows, Mac 및 Linux 컴퓨터에서 작업하는 경우 일반적으로 paste
대신 경로를 만드는 것이 좋습니다.
FilePath <- file.path(AVariableWithFullProjectPath,"SomeSubfolder","SomeFileName.txt.gz")
Data <- as.matrix(read.table(FilePath, header=FALSE, sep ="\t"))
일반적으로 이것은 대부분의 사람들에게 충분합니다.
때로는 행렬 치수가 너무 커서 행렬을 읽는 동안 메모리 할당 절차를 고려해야합니다. 행렬을 한 행씩 읽는 것을 의미합니다.
앞의 예제를 보자.이 경우 FilePath
는 0이 아닌 값을 포함하는 79 %의 셀이있는 8970 8970
차원의 파일을 포함합니다.
system.time(expr=Data<-as.matrix(read.table(file=FilePath,header=FALSE,sep=" ") ))
system.time
은 파일을 읽는 데 267 초가 걸렸습니다.
user system elapsed
265.563 1.949 267.563
마찬가지로이 파일은 한 줄씩 읽을 수 있습니다.
FilePath <- "SomeFile"
connection<- gzfile(FilePath,open="r")
TableList <- list()
Counter <- 1
system.time(expr= while ( length( Vector<-as.matrix(scan(file=connection, sep=" ", nlines=1, quiet=TRUE)) ) > 0 ) {
TableList[[Counter]]<-Vector
Counter<-Counter+1
})
user system elapsed
165.976 0.060 165.941
close(connection)
system.time(expr=(Data <- do.call(rbind,TableList)))
user system elapsed
0.477 0.088 0.565
또한 read.matrix
메소드를 구현하는 futile.matrix
패키지가 있습니다. 코드 자체는 예 1에서 설명한 것과 동일하게 나타납니다.
.csv 파일 내보내기
기본 R을 사용하여 내보내기
write.csv()
사용하여 데이터를 CSV 파일에 쓸 수 있습니다.
write.csv(mtcars, "mtcars.csv")
일반적으로 지정된 매개 변수에는 row.names = FALSE
및 na = ""
됩니다.
패키지를 사용하여 내보내기
readr::write_csv
상당히보다 빠른 write.csv
및 행 이름을 기록하지 않습니다.
library(readr)
write_csv(mtcars, "mtcars.csv")
여러 csv 파일 가져 오기
files = list.files(pattern="*.csv")
data_list = lapply(files, read.table, header = TRUE)
이렇게하면 모든 파일을 읽고 목록에 추가합니다. 이후 모든 data.frame이 동일한 구조를 가지면 하나의 큰 data.frame으로 결합 될 수 있습니다.
df <- do.call(rbind, data_list)
고정 너비 파일 가져 오기
고정 너비 파일은 컬럼이 ;
,
또는와 같은. 자 분리. 자로 구분되지 않는 텍스트 파일입니다 ;
, 고정 문자 길이 ( 너비 )가 있어야합니다. 데이터는 대개 공백으로 채워집니다.
예 :
Column1 Column2 Column3 Column4Column5
1647 pi 'important' 3.141596.28318
1731 euler 'quite important' 2.718285.43656
1979 answer 'The Answer.' 42 42
이 데이터 테이블이 작업 디렉토리의 로컬 파일 constants.txt
에 있다고 가정 해 봅시다.
기초 R로 가져 오기
df <- read.fwf('constants.txt', widths = c(8,10,18,7,8), header = FALSE, skip = 1)
df
#> V1 V2 V3 V4 V5
#> 1 1647 pi 'important' 3.14159 6.28318
#> 2 1731 euler 'quite important' 2.71828 5.43656
#> 3 1979 answer 'The Answer.' 42 42.0000
노트 :
- 열 제목은 문자로 구분할 필요가 없습니다 (
Column4Column5
). -
widths
매개 변수는 각 열의 너비를 정의합니다. - 비 구분 머리글은
read.fwf()
읽을 수 없습니다.
reader로 가져 오기
library(readr)
df <- read_fwf('constants.txt',
fwf_cols(Year = 8, Name = 10, Importance = 18, Value = 7, Doubled = 8),
skip = 1)
df
#> # A tibble: 3 x 5
#> Year Name Importance Value Doubled
#> <int> <chr> <chr> <dbl> <dbl>
#> 1 1647 pi 'important' 3.14159 6.28318
#> 2 1731 euler 'quite important' 2.71828 5.43656
#> 3 1979 answer 'The Answer.' 42.00000 42.00000
노트 :
- readr의
fwf_*
도우미 함수는 자동 추측 (fwf_empty
)을 포함하여 열 길이를 지정하는 다른 방법을 제공합니다. - 판독기가 기본 R보다 빠릅니다.
- 열 제목은 데이터 파일에서 자동으로 가져올 수 없습니다.