R Academy · leksjon

Skrive data i flere formater

Eksporter data frames til CSV, Excel og RDS med write_csv() og writexl.

Leksjon 4 av 413 trinn

Skrive data i flere formater er en gratis leksjon i R Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i R Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i R Academy inneholder totalt 4 leksjoner.

Skrive data fra R

Å lese data er bare halve jobben — De må også lagre resultatene. R støtter flere utdataformater: CSV for universell kompatibilitet, RDS for å bevare R-objekter nøyaktig, Parquet for høytytende analyse og flere andre. Velg format ut fra målgruppen og bruksområdet.

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() — Lagre som CSV

write_csv(df, 'file.csv') lagrer en data frame som en kommaseparert fil. Den skriver IKKE radnavn som standard (i motsetning til write.csv()). Resultatet er alltid UTF-8-kodet. Funksjonen returnerer data framen usynlig, slik at den kan brukes i pipes.

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)

Alternativer for write_csv()

write_csv() godtar flere alternativer: na='NA' styrer hvordan NA-verdier skrives, append=TRUE legger til data i en eksisterende fil, col_names=FALSE utelater overskriften, og quote styrer når felt skal omsluttes av anførselstegn.

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() — Tabulatorseparerte data

write_tsv(df, 'file.tsv') lagrer data som tabulatorseparerte data. Dette foretrekkes når dataene inneholder kommaer, eller når systemet som skal lese dataene, forventer TSV. Alternativene er de samme som for 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() — Lagre et vilkårlig R-objekt

saveRDS(obj, 'file.rds') serialiserer et vilkårlig R-objekt til disk i R-formatets opprinnelige binærformat. readRDS('file.rds') gjenoppretter det nøyaktig og bevarer kolonnetyper, faktorer, attributter og til og med modellobjekter. Formatet kan ikke leses av mennesker, men er fullt portabelt mellom R-økter.

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() kontra save() — viktig forskjell

saveRDS(obj, 'file.rds') lagrer ett enkelt objekt uten navnet. Med readRDS() kan De gi det hvilket som helst navn. save(obj1, obj2, 'file.RData') lagrer flere navngitte objekter, mens load() gjenoppretter dem med de opprinnelige navnene (og kan overskrive eksisterende variabler).

# 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() — Egendefinert skilletegn

write_delim(df, file, delim='|') skriver data med et vilkårlig skilletegn. Bruk dette når systemet som skal lese dataene, forventer pipe-separerte data eller andre ikke-standardiserte formater. De samme garantiene for datakvalitet som i write_csv() gjelder.

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

Excel-utdata med writexl

Pakken writexl (en følgepakke til readxl) skriver data frames i .xlsx-format: writexl::write_xlsx(df, 'file.xlsx'). For flere ark sender De inn en navngitt liste. Det kreves verken Java eller en Excel-installasjon.

# 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!')

Parquet-filer med arrow

Apache Parquet er et kolonneorientert lagringsformat som egner seg godt for store datasett: Det komprimeres effektivt og leses mye raskere enn CSV ved kolonneorienterte spørringer. Pakken arrow tilbyr write_parquet() og 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!')

Skrive data i en pipeline

Både write_csv() og saveRDS() returnerer inndataene usynlig, slik at de kan brukes i en pipe uten å bryte flyten. Sett inn et skr langkah i pipelinen med write_csv() som et kontrollpunkt for reproduserbarhet.

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)

Veiledning for valg av format

Valget av riktig utdataformat avhenger av målet:

  • CSV/TSV: universelt, lesbart for mennesker og kan åpnes av alle
  • RDS: R-til-R, bevarer alle typer og attributter nøyaktig
  • xlsx: forretningsbrukere og Excel-brukere
  • Parquet: store datamengder, analysepipelines og produksjonssystemer
  • JSON: API-er og nøstede/hierarkiske data (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')

Rask kontroll

Hva er den viktigste fordelen med saveRDS() sammenlignet med write_csv() når De skal lagre R-data?

Oppsummering: Skrive data

Viktigste punkter om å skrive data fra R:

  • write_csv(df, 'file.csv') — kommaseparert, uten radnavn, UTF-8
  • write_tsv(df, 'file.tsv') — tabulatorseparerte data
  • write_delim(df, file, delim='|') — vilkårlig skilletegn
  • saveRDS(obj, 'file.rds') — binært R-format som bevarer alle typer
  • readRDS('file.rds') — gjenoppretter med et valgfritt navn; load() gjenoppretter de opprinnelige navnene
  • writexl::write_xlsx() — Excel-utdata uten behov for Java
  • arrow::write_parquet() — kolonneorientert format for store analytiske datasett
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
Gratis å komme i gang

Lær deg R med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
43
Leksjoner
159

Ofte stilte spørsmål

Er leksjonen «Skrive data i flere formater» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien R Academy, inkludert «Skrive data i flere formater», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i R Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Skrive data i flere formater»?

Eksporter data frames til CSV, Excel og RDS med write_csv() og writexl. Du øver på R Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med R Academy?

Ingen tidligere erfaring er nødvendig. R Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Skrive data i flere formater»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne R Academy-leksjonen?

Ja. Alle R Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Lese CSV-filer med read_csv()
  2. Tolke TSV-filer og filer med fast bredde
  3. Importere Excel-filer med readxl
  4. Skrive data i flere formater
← Tilbake til R Academy