R Academy · Lektion

Skrivning af data i flere formater

Eksportér data frames til CSV, Excel og RDS med write_csv() og writexl.

Lektion 4 af 413 trin

Skrivning af data i flere formater er en gratis R Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i R Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. R Academy-kurset indeholder 4 lektioner i alt.

Skrivning af data fra R

At læse data er kun halvdelen af opgaven — du skal også gemme resultaterne. R understøtter flere outputformater: CSV for universel kompatibilitet, RDS til præcis bevaring af R-objekter, Parquet til højtydende analyse og meget mere. Vælg format ud fra målgruppen og anvendelsen.

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

write_csv(df, 'file.csv') gemmer en data frame som en kommasepareret fil. Den skriver ikke rækkenavne som standard (i modsætning til write.csv()). Resultatet er altid UTF-8-kodet. Funktionen returnerer data framen usynligt, så den kan bruges 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)

Indstillinger for write_csv()

write_csv() accepterer flere indstillinger: na='NA' styrer, hvordan NA-værdier skrives, append=TRUE føjer til en eksisterende fil, col_names=FALSE udelader overskriften, og quote styrer, hvornår felter sættes i 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() — Tabulatorsepareret output

write_tsv(df, 'file.tsv') gemmer data som tabulatorsepareret output. Det foretrækkes, når dataene indeholder kommaer, eller når det efterfølgende system forventer TSV. Indstillingerne 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() — Gem ethvert R-objekt

saveRDS(obj, 'file.rds') serialiserer ethvert R-objekt til disken i R's oprindelige binære format. readRDS('file.rds') gendanner det præcist — inklusive kolonnetyper, faktorer, attributter og endda modelobjekter. Formatet kan ikke læses af mennesker, men kan uden problemer bruges mellem forskellige R-sessioner.

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() — Vigtig forskel

saveRDS(obj, 'file.rds') gemmer ét objekt uden dets navn. readRDS() lader dig tildele det et hvilket som helst navn. save(obj1, obj2, 'file.RData') gemmer flere navngivne objekter; load() gendanner dem med deres oprindelige navne (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() — Brugerdefineret skilletegn

write_delim(df, file, delim='|') skriver med et vilkårligt skilletegn. Brug det, når det efterfølgende system forventer pipe-separerede eller andre ikke-standardiserede formater. De samme garantier for datakvalitet som ved write_csv() gælder.

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-output med writexl

Pakken writexl (ledsager til readxl) skriver data frames i .xlsx-format: writexl::write_xlsx(df, 'file.xlsx'). Ved flere ark skal du angive en navngivet liste. Der kræves hverken Java eller en Excel-installation.

# 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 kolonnebaseret lagerformat, der er ideelt til store datasæt: Det komprimerer effektivt og læses meget hurtigere end CSV ved kolonneorienterede forespørgsler. Pakken arrow leverer 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!')

Skrivning af data i en datapipeline

Både write_csv() og saveRDS() returnerer deres input usynligt, så de kan bruges i en pipe uden at afbryde dataflowet. Indsæt et skridt til skrivning midt i datapipelinen med et kontrolpunkt via write_csv() for at sikre reproducerbarhed.

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)

Vejledning til valg af format

Valget af det rigtige outputformat afhænger af dit mål:

  • CSV/TSV: universelt, menneskelæsbart, alle kan åbne det
  • RDS: fra R til R, bevarer alle typer og attributter præcist
  • xlsx: erhvervsbrugere og Excel-brugere
  • Parquet: store datamængder, analysepipelines og produktionssystemer
  • JSON: API'er og indlejrede eller 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')

Hurtigt tjek

Hvad er den vigtigste fordel ved saveRDS() frem for write_csv(), når du gemmer R-data?

Opsummering: Skrivning af data

Vigtigste pointer om skrivning af data fra R:

  • write_csv(df, 'file.csv') — kommasepareret, uden rækkenavne, UTF-8
  • write_tsv(df, 'file.tsv') — tabulatorsepareret output
  • write_delim(df, file, delim='|') — vilkårligt skilletegn
  • saveRDS(obj, 'file.rds') — binært R-format, bevarer alle typer
  • readRDS('file.rds') — gendan med et hvilket som helst navn; load() gendanner de oprindelige navne
  • writexl::write_xlsx() — Excel-output uden behov for Java
  • arrow::write_parquet() — kolonnebaseret format til store analytiske datasæt
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 at komme i gang

Lær R med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
43
Lektioner
159

Ofte stillede spørgsmål

Er lektionen “Skrivning af data i flere formater” gratis?

Ja — alle 3 lektioner i læringssporet R Academy, inklusive “Skrivning af data i flere formater”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. R Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Skrivning af data i flere formater”?

Eksportér data frames til CSV, Excel og RDS med write_csv() og writexl. Du øver dig i R Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på R Academy?

Der kræves ingen tidligere erfaring. R Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Skrivning af data i flere formater”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne R Academy-lektion?

Ja. Alle R Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Læsning af CSV-filer med read_csv()
  2. Parsing af TSV- og fastbreddefiler
  3. Import af Excel-filer med readxl
  4. Skrivning af data i flere formater
← Tilbage til R Academy