TSV 및 고정 너비 파일 구문 분석
탭으로 구분된 데이터와 고정 너비 데이터를 위해 read_tsv()와 read_fwf()를 사용합니다.
TSV 및 고정 너비 파일 구문 분석은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
CSV 너머: 다른 파일 형식
모든 표 형식 데이터가 CSV로 제공되는 것은 아닙니다. 탭으로 구분된 파일(TSV), 파이프로 구분된 파일, 고정 너비 형식(FWF) 파일은 정부 데이터, 레거시 시스템, 과학 데이터베이스에서 흔히 사용됩니다. readr 패키지는 일관된 문법으로 이러한 형식을 모두 처리합니다.
library(readr)
# readr's flat file readers:
# read_csv() - comma-separated
# read_csv2() - semicolon-separated (European)
# read_tsv() - tab-separated
# read_delim() - any delimiter
# read_fwf() - fixed-width format
# read_lines() - raw text, one line per element
cat('All readr functions return tibbles with the same interface!')read_tsv() — 탭으로 구분된 값
read_tsv()는 탭으로 구분된 파일을 읽습니다. col_types, na, skip 등 read_csv()와 동일한 인수를 사용합니다. 데이터에 쉼표가 포함되어 있을 때(주소, 설명 등)는 CSV보다 TSV를 사용하는 것이 좋습니다.
library(readr)
# Simulated TSV using \t as delimiter
tsv_data <- 'name\tscore\tcity
Alice Smith\t85\tNew York, NY
Bob Jones\t92\tLos Angeles, CA
Carol White\t78\tChicago, IL'
# Note: cities contain commas — TSV handles this cleanly
df <- read_tsv(tsv_data, show_col_types=FALSE)
print(df)read_delim() — 모든 구분 기호 사용하기
read_delim(file, delim='|')은 한 문자로 된 모든 구분 기호를 처리합니다. 파이프로 구분된 파일(|)은 파이프 문자가 실제 데이터에 거의 나타나지 않기 때문에 데이터 웨어하우스와 정부 데이터 내보내기에서 흔히 사용됩니다.
library(readr)
# Pipe-delimited data
pipe_data <- 'ID|Name|Department|Salary
1|Alice Smith|Engineering|95000
2|Bob Jones|Marketing|72000
3|Carol White|HR|65000'
df <- read_delim(pipe_data, delim='|', show_col_types=FALSE)
print(df)세미콜론 파일에 read_delim() 사용하기
유럽식 CSV 파일은 구분 기호로 세미콜론을 사용하고 소수점 표시로 쉼표를 사용하는 경우가 많습니다. read_csv2()는 read_delim(delim=';', locale=locale(decimal_mark=','))의 단축형이며, read_delim()을 직접 구성해도 됩니다.
library(readr)
# European-style: semicolon delimiter, comma decimal
european_data <- 'name;price;quantity
Widget;9,99;100
Gadget;24,50;50
Sprocket;4,75;200'
# Method 1: read_csv2() shortcut
df1 <- read_csv2(european_data, show_col_types=FALSE)
print(df1)
# Method 2: explicit read_delim
# read_delim(data, delim=';', locale=locale(decimal_mark=','))read_fwf() — 고정 너비 형식
고정 너비 파일에는 구분 기호가 없으며, 열은 문자 위치로 식별됩니다. 레거시 메인프레임 내보내기 파일과 정부 데이터에서 흔히 사용됩니다. 열 너비를 지정하려면 fwf_widths()를, 시작 및 끝 위치를 지정하려면 fwf_cols()를 사용합니다.
library(readr)
# Fixed-width data (positions matter!)
fwf_data <- 'Alice 085NYC
Bob 092LA
Carol 078Chicago '
# Column widths: name=9, score=3, city=10
df <- read_fwf(
fwf_data,
col_positions = fwf_widths(
widths = c(9, 3, 10),
col_names = c('name','score','city')
),
show_col_types = FALSE
)
print(df)시작 및 끝 열에 fwf_positions() 사용하기
fwf_positions(start, end, col_names)는 문자의 정확한 시작 위치와 끝 위치를 지정합니다(1부터 시작). 열 너비가 일정하지 않거나 일부 열을 지정하지 않아 건너뛰어야 할 때 정확하게 사용할 수 있습니다.
library(readr)
# Another fixed-width example using start/end positions
fwf_data <- '001ALICE 02024-01-15
002BOB 01 2024-02-20
003CAROL 03 2024-03-10'
df <- read_fwf(
fwf_data,
col_positions = fwf_positions(
start = c(1, 4, 11, 14),
end = c(3, 10, 12, 23),
col_names = c('id','name','score','date')
),
show_col_types = FALSE
)
print(df)fwf_empty() — 너비 자동 감지하기
fwf_empty(file, col_names)은 공백 간격을 기준으로 열 경계를 자동 감지하려고 시도합니다. 열 이름은 별도로 제공해야 합니다. 간격이 일정하고 형식이 깔끔한 FWF 파일에서 가장 잘 작동합니다.
library(readr)
# Well-spaced fixed-width data
fwf_data <- 'name score grade
Alice 85 B
Bob 92 A
Carol 78 C
Dave 88 B'
# Auto-detect column positions from whitespace
df <- read_fwf(
fwf_data,
col_positions = fwf_empty(fwf_data, col_names=c('name','score','grade')),
show_col_types = FALSE
)
print(df)read_lines() — 원시 텍스트 분석
read_lines(file)은 텍스트 파일을 한 번에 한 줄씩 읽어 문자 벡터로 반환합니다. 가장 낮은 수준의 읽기 함수이므로, 분석하기 전에 줄을 전처리해야 할 때 사용합니다(예: 주석 필터링, 일관되지 않은 형식 처리).
library(readr)
# Read lines and filter manually
raw_text <- '# Comment line
# Another comment
name,score
Alice,85
Bob,92'
lines <- read_lines(raw_text)
print(lines)
# Filter out comment lines
clean_lines <- lines[!startsWith(lines, '#')]
df <- read_csv(paste(clean_lines, collapse='\n'), show_col_types=FALSE)
print(df)점진적으로 확인하는 read_lines()
read_lines(file, n_max=10)은 전체를 읽기 전에 모든 텍스트 파일의 처음 몇 줄만 미리 보여 줍니다. 인코딩 문제를 진단하거나, 실제 머리글 행을 찾거나, 구분 기호 유형을 감지할 때 유용합니다.
library(readr)
# Preview first few lines before reading
sample_file <- 'METADATA: version 1.2
DATE: 2024-01-15
---
id,name,value
1,Alice,100
2,Bob,200'
# Inspect to find where the data starts
preview <- read_lines(sample_file, n_max=4)
print(preview)
# From this we know: skip=3, then read as CSV인코딩 문제 처리하기
ASCII가 아닌 문자(악센트가 있는 문자, 라틴 문자가 아닌 문자 체계)를 사용하려면 올바른 인코딩을 지정해야 합니다. read_csv() 또는 read_delim() 안에서 locale(encoding='latin1')이나 locale(encoding='UTF-8')을 사용합니다. 기본값은 UTF-8입니다.
library(readr)
# Detect encoding of a file
# readr::guess_encoding('file.csv') # Returns likely encodings
# Specify encoding explicitly
# df <- read_csv('data_latin1.csv',
# locale = locale(encoding = 'latin1'))
# For UTF-8 with BOM (common in Windows exports):
# df <- read_csv('data_utf8bom.csv',
# locale = locale(encoding = 'UTF-8-BOM'))
cat('Encoding matters for accented chars: \xc3\xa9 (UTF-8 for e-acute)\n')
print(guess_encoding(chartr('\xe9','e','caf\xe9')))적절한 읽기 함수 선택하기
올바른 readr 함수를 선택하기 위한 간단한 안내:
- 쉼표 →
read_csv() - 세미콜론 + 유럽식 소수점 →
read_csv2() - 탭 →
read_tsv() - 기타 구분 기호 →
read_delim(delim='|') - 고정 위치 →
read_fwf() - 원시 데이터 확인 →
read_lines()
library(readr)
# Quick comparison of delimiters
csv_data <- 'a,b,c\n1,2,3'
tsv_data <- 'a\tb\tc\n1\t2\t3'
pipe_data <- 'a|b|c\n1|2|3'
read_csv(csv_data, show_col_types=FALSE)
read_tsv(tsv_data, show_col_types=FALSE)
read_delim(pipe_data, delim='|', show_col_types=FALSE)빠른 확인
열이 고정된 문자 위치로 정의된 파일(구분 기호 없음)을 읽을 때 가장 적합한 readr 함수는 무엇인가요?
복습: TSV 및 고정 너비 파일
CSV가 아닌 플랫 파일 형식에서 기억할 핵심 내용:
read_tsv()— 탭으로 구분; 데이터에 쉼표가 포함될 때 적합read_delim(delim='|')— 한 문자로 된 모든 구분 기호read_csv2()— 유럽식 소수점 표시를 사용하는 세미콜론 구분 형식read_fwf(fwf_widths(c(10,5,8)))— 열 너비로 지정하는 고정 너비 형식read_fwf(fwf_positions(start, end))— 정확한 위치로 지정하는 고정 너비 형식read_lines(file, n_max=10)— 분석 전에 원시 줄 확인- 모든 함수는 동일한
col_types,na,skip,locale()인수를 공유
library(readr)
# Pipe-delimited with custom NA values
df <- read_delim(
'ID|Name|Score|City
1|Alice|85|NYC
2|Bob|N/A|N/A
3|Carol|78|Chicago',
delim = '|',
na = c('', 'NA', 'N/A'),
show_col_types = FALSE
)
print(df)
print(colSums(is.na(df)))자주 묻는 질문
“TSV 및 고정 너비 파일 구문 분석” 강의는 무료인가요?
네 — “TSV 및 고정 너비 파일 구문 분석” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“TSV 및 고정 너비 파일 구문 분석”에서 뭘 배우나요?
탭으로 구분된 데이터와 고정 너비 데이터를 위해 read_tsv()와 read_fwf()를 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
R Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“TSV 및 고정 너비 파일 구문 분석” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- read_csv()로 CSV 파일 읽기
- TSV 및 고정 너비 파일 구문 분석
- readxl로 Excel 파일 가져오기
- 여러 형식으로 데이터 작성하기