R Academy · Lektion

Skriva data i flera format

Exportera data frames till CSV, Excel och RDS med write_csv() och writexl.

Lektion 4 av 413 steg

Skriva data i flera format är en gratis lektion i R Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för R Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i R Academy innehåller totalt 4 lektioner.

Skriva data från R

Att läsa data är bara halva arbetet — ni behöver också spara resultaten. R stöder flera utdataformat: CSV för universell kompatibilitet, RDS för att bevara R-objekt exakt, Parquet för högpresterande analys och många fler. Välj format utifrån målgrupp och användningsområde.

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

write_csv(df, 'file.csv') sparar en data frame som en kommaseparerad fil. Den skriver INTE radnamn som standard (till skillnad från write.csv()). Resultatet är alltid UTF-8-kodat. Funktionen returnerar data frame-objektet osynligt och kan därför användas 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)

Alternativ för write_csv()

write_csv() accepterar flera alternativ: na='NA' styr hur NA-värden skrivs, append=TRUE lägger till data i en befintlig fil, col_names=FALSE utelämnar rubriken och quote styr när fält ska omges av citattecken.

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() — tabbseparerad utdata

write_tsv(df, 'file.tsv') sparar data som tabbseparerad text. Det här formatet passar bäst när data innehåller kommatecken eller när det efterföljande systemet förväntar sig TSV. Samma alternativ som för 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() — spara valfritt R-objekt

saveRDS(obj, 'file.rds') serialiserar valfritt R-objekt till disk i R:s inbyggda binärformat. readRDS('file.rds') återställer det exakt och bevarar kolumntyper, faktorer, attribut och även modellobjekt. Formatet är inte läsbart för människor, men kan utan problem användas mellan olika 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() jämfört med save() — viktig skillnad

saveRDS(obj, 'file.rds') sparar ett enskilt objekt utan dess namn. Med readRDS() kan ni tilldela det valfritt namn. save(obj1, obj2, 'file.RData') sparar flera namngivna objekt, medan load() återställer dem med de ursprungliga namnen (och kan skriva över befintliga 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() — anpassad avgränsare

write_delim(df, file, delim='|') skriver data med valfri avgränsare. Använd detta när det efterföljande systemet förväntar sig rörseparerade eller andra icke-standardiserade format. Samma garantier för datakvalitet som för write_csv() gäller.

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

Paketet writexl (komplementet till readxl) skriver data frames i .xlsx-format: writexl::write_xlsx(df, 'file.xlsx'). För flera blad skickar ni in en namngiven lista. Varken Java eller en Excel-installation krävs.

# 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 är ett kolumnbaserat lagringsformat som passar utmärkt för stora datamängder: det komprimeras effektivt och läses mycket snabbare än CSV vid kolumnorienterade frågor. Paketet arrow tillhandahåller write_parquet() och 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!')

Skriva data i en pipeline

Både write_csv() och saveRDS() returnerar sina indatavärden osynligt, vilket gör att de kan användas i en pipe utan att flödet bryts. Lägg in ett skrivsteg mitt i pipelinen med write_csv() som kontrollpunkt för reproducerbarhet.

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)

Guide för val av format

Vilket utdataformat ni bör välja beror på målet:

  • CSV/TSV: universella och läsbara för människor; alla kan öppna dem
  • RDS: R till R; bevarar alla typer och attribut exakt
  • xlsx: för företagsanvändare och Excel-användare
  • Parquet: för stora datamängder, analyspipelines och produktionssystem
  • JSON: för API:er och nästlade eller hierarkiska 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')

Snabb kontroll

Vilken är den viktigaste fördelen med saveRDS() jämfört med write_csv() när ni sparar R-data?

Sammanfattning: skriva data

Viktiga punkter om att skriva data från R:

  • write_csv(df, 'file.csv') — kommaseparerad, utan radnamn, UTF-8
  • write_tsv(df, 'file.tsv') — tabbseparerad utdata
  • write_delim(df, file, delim='|') — valfri avgränsare
  • saveRDS(obj, 'file.rds') — binärt R-format som bevarar alla typer
  • readRDS('file.rds') — återställer med valfritt namn; load() återställer ursprungliga namn
  • writexl::write_xlsx() — Excel-utdata utan behov av Java
  • arrow::write_parquet() — kolumnbaserat format för stora analytiska datamängder
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 att börja

Lär dig R med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
43
Lektioner
159

Vanliga frågor

Är lektionen ”Skriva data i flera format” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen R Academy, inklusive ”Skriva data i flera format”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i R Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Skriva data i flera format”?

Exportera data frames till CSV, Excel och RDS med write_csv() och writexl. Ni övar på R Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig R Academy?

Du behöver inga förkunskaper. Utbildningen i R Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Skriva data i flera format”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här R Academy-lektionen?

Ja. Varje R Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Läsa CSV-filer med read_csv()
  2. Parsa TSV-filer och filer med fast bredd
  3. Importera Excel-filer med readxl
  4. Skriva data i flera format
← Tillbaka till R Academy