여러 형식으로 데이터 작성하기
write_csv()와 writexl로 데이터 프레임을 CSV, Excel, RDS로 내보냅니다.
여러 형식으로 데이터 작성하기은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
R에서 데이터 작성하기
데이터를 읽는 것만으로는 충분하지 않습니다. 결과도 저장해야 합니다. R은 여러 출력 형식을 지원합니다. 범용 호환성을 위한 CSV, R 객체를 정확히 보존하는 RDS, 고성능 분석을 위한 Parquet 등이 있습니다. 대상 사용자와 사용 목적에 따라 형식을 선택하십시오.
library(readr)
# Create a sample data frame to write
df <- data.frame(
name = c('Alice','Bob','Carol'),
score = c(85.5, 92.0, 78.3),
grade = c('B','A','C'),
passed = c(TRUE, TRUE, TRUE)
)
print(df)
cat('\nWe will save this in multiple formats!')write_csv() — CSV로 저장하기
write_csv(df, 'file.csv')는 데이터 프레임을 쉼표로 구분된 파일로 저장합니다. write.csv()와 달리 기본적으로 행 이름을 기록하지 않습니다. 결과는 항상 UTF-8로 인코딩됩니다. 데이터 프레임을 보이지 않게 반환하므로 파이프에서 사용할 수 있습니다.
library(readr)
df <- data.frame(
name = c('Alice','Bob','Carol'),
score = c(85, 92, 78)
)
# Write to /tmp for demonstration
write_csv(df, '/tmp/students.csv')
# Verify by reading back
read_csv('/tmp/students.csv', show_col_types=FALSE)write_csv() 옵션
write_csv()는 여러 옵션을 지원합니다. na='NA'는 NA를 기록하는 방식을 제어하고, append=TRUE는 기존 파일에 내용을 추가하며, col_names=FALSE는 헤더를 생략합니다. quote는 필드를 따옴표로 묶을 시점을 제어합니다.
library(readr)
df <- data.frame(
name = c('Alice','Bob'),
city = c('New York','Los,Angeles'), # Contains comma
score = c(85, NA)
)
# na='' writes NA as empty string (common Excel convention)
write_csv(df, '/tmp/test_write.csv', na='')
cat(paste(read_lines('/tmp/test_write.csv'), collapse='\n'))write_tsv() — 탭으로 구분된 출력
write_tsv(df, 'file.tsv')는 데이터를 탭으로 구분된 형식으로 저장합니다. 데이터에 쉼표가 포함되어 있거나 후속 시스템이 TSV를 요구할 때 사용하는 것이 좋습니다. 옵션은 write_csv()와 같습니다.
library(readr)
df <- data.frame(
address = c('123 Main St, NYC','456 Oak Ave, LA'),
score = c(85, 92)
)
# TSV avoids delimiter conflict with commas in addresses
write_tsv(df, '/tmp/addresses.tsv')
cat(paste(read_lines('/tmp/addresses.tsv'), collapse='\n'))saveRDS() — 모든 R 객체 저장하기
saveRDS(obj, 'file.rds')는 모든 R 객체를 R 고유의 이진 형식으로 직렬화하여 디스크에 저장합니다. readRDS('file.rds')는 열 형식, 팩터, 속성, 심지어 모델 객체까지 보존하면서 객체를 정확히 복원합니다. 사람이 읽을 수는 없지만 R 세션 간에 완전히 이식할 수 있습니다.
library(readr)
df <- data.frame(
name = c('Alice','Bob'),
score = c(85.5, 92.0),
grade = factor(c('B','A'), levels=c('A','B','C','D'))
)
# Save with full type preservation
saveRDS(df, '/tmp/students.rds')
# Restore exactly
df2 <- readRDS('/tmp/students.rds')
print(df2)
print(class(df2$grade)) # factor — preserved!saveRDS()와 save()의 차이 — 핵심
saveRDS(obj, 'file.rds')는 이름 없이 단일 객체를 저장합니다. readRDS()를 사용하면 객체에 원하는 이름을 지정할 수 있습니다. save(obj1, obj2, 'file.RData')는 이름이 지정된 여러 객체를 저장하고, load()는 원래 이름으로 객체를 복원합니다(기존 변수를 덮어쓸 수 있습니다).
# saveRDS: single object, flexible on load
model <- lm(mpg ~ wt, data=mtcars)
saveRDS(model, '/tmp/my_model.rds')
best_model <- readRDS('/tmp/my_model.rds') # Any name!
cat('R-squared:', round(summary(best_model)$r.squared, 3), '\n')
# save: multiple named objects, fixed names on load
# save(model, mtcars, file='/tmp/workspace.RData')
# load('/tmp/workspace.RData') # Restores 'model' and 'mtcars'write_delim() — 사용자 지정 구분 기호
write_delim(df, file, delim='|')은 원하는 구분 기호를 사용해 데이터를 기록합니다. 후속 시스템이 파이프로 구분된 형식이나 기타 표준이 아닌 형식을 요구할 때 사용하십시오. 데이터 품질 보장은 write_csv()와 동일하게 적용됩니다.
library(readr)
df <- data.frame(
id = 1:3,
name = c('Alice','Bob','Carol'),
value = c(100, 200, 150)
)
# Write pipe-delimited
write_delim(df, '/tmp/data.psv', delim='|')
cat(paste(read_lines('/tmp/data.psv'), collapse='\n'))writexl을 사용한 Excel 출력
writexl 패키지(readxl의 관련 패키지)는 데이터 프레임을 .xlsx 형식으로 기록합니다: writexl::write_xlsx(df, 'file.xlsx'). 여러 시트를 작성하려면 이름이 지정된 목록을 전달하십시오. Java나 Excel을 설치할 필요가 없습니다.
# writexl::write_xlsx() — example (library not always available)
# library(writexl)
df1 <- data.frame(name=c('Alice','Bob'), score=c(85,92))
df2 <- data.frame(region=c('East','West'), sales=c(100,200))
# Single sheet:
# write_xlsx(df1, '/tmp/students.xlsx')
# Multiple sheets (named list):
# write_xlsx(
# list(students=df1, sales=df2),
# '/tmp/report.xlsx'
# )
cat('writexl writes pure .xlsx without Java or Excel!')arrow를 사용한 Parquet 파일
Apache Parquet은 대규모 데이터 세트에 적합한 열 지향 저장 형식입니다. 압축 효율이 높고 열 중심 쿼리에서 CSV보다 훨씬 빠르게 읽을 수 있습니다. arrow 패키지는 write_parquet()과 read_parquet()을 제공합니다.
# arrow::write_parquet() concept
# library(arrow)
# Large CSV -> Parquet (10-100x smaller, 10-100x faster reads)
# df <- read_csv('big_file.csv')
# write_parquet(df, 'big_file.parquet')
# df_back <- read_parquet('big_file.parquet')
# Parquet benefits:
# - Columnar: only reads columns you need
# - Compressed: ~10x smaller than CSV
# - Typed: no type re-guessing on read
# - Partitioned: split by date/region for parallel reads
cat('Parquet is the modern standard for large-scale analytics in R!')파이프라인에서 데이터 작성하기
write_csv()와 saveRDS()는 모두 입력을 보이지 않게 반환하므로 흐름을 끊지 않고 파이프 안에서 사용할 수 있습니다. 재현성을 확보하려면 체크포인트 역할을 하는 write_csv() 기록 단계를 파이프라인 중간에 삽입하십시오.
library(readr)
library(dplyr)
# Write mid-pipeline as a checkpoint
final_result <- data.frame(
region=c('East','West','North'),
sales=c(100,200,80)
) %>%
mutate(pct = round(100*sales/sum(sales),1)) %>%
{. ->> checkpoint_df; .} %>% # Save checkpoint
filter(sales > 90)
write_csv(checkpoint_df, '/tmp/checkpoint.csv')
print(final_result)형식 선택 안내
적절한 출력 형식은 목표에 따라 달라집니다:
- CSV/TSV: 범용적이고 사람이 읽을 수 있으며 누구나 열 수 있습니다
- RDS: R에서 R로 사용할 때 적합하며 모든 형식과 속성을 정확히 보존합니다
- xlsx: 업무 사용자와 Excel 사용자를 위한 형식입니다
- Parquet: 대규모 데이터, 분석 파이프라인, 운영 시스템에 적합합니다
- JSON: API와 중첩/계층적 데이터에 적합합니다(
jsonlite::toJSON())
library(readr)
df <- data.frame(
id = 1:5,
value = c(10.5, 20.3, 15.7, 30.1, 25.8)
)
# CSV — universal
write_csv(df, '/tmp/data.csv')
# TSV — when commas are in data
write_tsv(df, '/tmp/data.tsv')
# RDS — R-native, type-preserving
saveRDS(df, '/tmp/data.rds')
cat('Files created:\n')
cat('CSV size:', file.size('/tmp/data.csv'), 'bytes\n')
cat('RDS size:', file.size('/tmp/data.rds'), 'bytes\n')빠른 확인
R 데이터를 저장할 때 write_csv()보다 saveRDS()가 갖는 핵심 장점은 무엇입니까?
요약: 데이터 작성하기
R에서 데이터를 작성할 때의 핵심 내용:
write_csv(df, 'file.csv')— 쉼표로 구분되며 행 이름 없이 UTF-8로 저장합니다write_tsv(df, 'file.tsv')— 탭으로 구분된 출력을 생성합니다write_delim(df, file, delim='|')— 원하는 구분 기호를 사용합니다saveRDS(obj, 'file.rds')— 이진 R 형식으로 저장하며 모든 형식을 보존합니다readRDS('file.rds')— 원하는 이름으로 복원합니다.load()는 원래 이름으로 복원합니다writexl::write_xlsx()— Java 없이 Excel 출력을 생성합니다arrow::write_parquet()— 대규모 분석 데이터 세트를 위한 열 지향 형식입니다
library(readr)
df <- data.frame(
name = c('Alice','Bob','Carol'),
score = c(85.5, 92.0, 78.3),
grade = factor(c('B','A','C'))
)
# CSV: universal but loses factor
write_csv(df, '/tmp/demo.csv')
df_csv <- read_csv('/tmp/demo.csv', show_col_types=FALSE)
cat('CSV grade type:', class(df_csv$grade), '\n') # character
# RDS: preserves factor
saveRDS(df, '/tmp/demo.rds')
df_rds <- readRDS('/tmp/demo.rds')
cat('RDS grade type:', class(df_rds$grade)) # factor자주 묻는 질문
“여러 형식으로 데이터 작성하기” 강의는 무료인가요?
네 — “여러 형식으로 데이터 작성하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“여러 형식으로 데이터 작성하기”에서 뭘 배우나요?
write_csv()와 writexl로 데이터 프레임을 CSV, Excel, RDS로 내보냅니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
R Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“여러 형식으로 데이터 작성하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- read_csv()로 CSV 파일 읽기
- TSV 및 고정 너비 파일 구문 분석
- readxl로 Excel 파일 가져오기
- 여러 형식으로 데이터 작성하기