R Academy · Oppitunti

Datan kirjoittaminen useisiin muotoihin

Viekää data framet CSV-, Excel- ja RDS-muotoihin write_csv()- ja writexl-työkaluilla.

Oppitunti 4/413 vaihetta

Datan kirjoittaminen useisiin muotoihin on ilmainen R Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu R Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. R Academy-kurssilla on yhteensä 4 oppituntia.

Tietojen kirjoittaminen R:stä

Tietojen lukeminen on vasta puolet kokonaisuudesta — tulokset on myös tallennettava. R tukee useita tulostusmuotoja: CSV:tä yleiseen yhteensopivuuteen, RDS:ää R-olioiden täsmälliseen säilyttämiseen, Parquetia tehokkaaseen analytiikkaan ja monia muita. Valitse muoto kohderyhmän ja käyttötarkoituksen perusteella.

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() — Tallentaminen CSV-muotoon

write_csv(df, 'file.csv') tallentaa data framen pilkuilla eroteltuna tiedostona. Se EI kirjoita rivinimiä oletusarvoisesti (toisin kuin write.csv()). Tulos käyttää aina UTF-8-koodausta. Funktio palauttaa data framen näkymättömästi, joten sitä voidaan käyttää putkissa.

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()-asetukset

write_csv() hyväksyy useita asetuksia: na='NA' määrittää, miten NA-arvot kirjoitetaan, append=TRUE lisää tiedot olemassa olevan tiedoston loppuun, col_names=FALSE jättää otsikkorivin pois ja quote määrittää, milloin kentät ympäröidään lainausmerkeillä.

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() — Sarkaineroteltu tuloste

write_tsv(df, 'file.tsv') tallentaa tiedot sarkaineroteltuina. Tätä muotoa kannattaa käyttää, kun tiedot sisältävät pilkkuja tai kun seuraava järjestelmä odottaa TSV-muotoa. Asetukset ovat samat kuin funktiossa 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() — Minkä tahansa R-olion tallentaminen

saveRDS(obj, 'file.rds') serialisoi minkä tahansa R-olion levylle R:n omassa binäärimuodossa. readRDS('file.rds') palauttaa olion täsmälleen ennalleen ja säilyttää saraketyypit, faktorit, attribuutit ja jopa mallioliot. Muoto ei ole ihmisen luettavissa, mutta oliot ovat täysin siirrettävissä R-istuntojen välillä.

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() vs save() — Keskeinen ero

saveRDS(obj, 'file.rds') tallentaa yksittäisen olion ilman sen nimeä. readRDS() avulla sille voidaan antaa mikä tahansa nimi. save(obj1, obj2, 'file.RData') tallentaa useita nimettyjä olioita; load() palauttaa ne alkuperäisillä nimillään (ja voi korvata olemassa olevia muuttujia).

# 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() — Mukautettu erotin

write_delim(df, file, delim='|') kirjoittaa tiedot millä tahansa erottimella. Käytä tätä, kun seuraava järjestelmä odottaa pystyviivalla eroteltua tai muuta epätyypillistä tiedostomuotoa. Samat tietojen laadun takeet kuin funktiossa write_csv() ovat voimassa.

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-tuloste writexl-paketilla

writexl-paketti (readxl-paketin oheispaketti) kirjoittaa data framet .xlsx-muotoon: writexl::write_xlsx(df, 'file.xlsx'). Useita laskentataulukoita varten välitä nimetty lista. Javaa tai Excelin asennusta ei tarvita.

# 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-tiedostot arrow-paketilla

Apache Parquet on suurille aineistoille sopiva sarakepohjainen tallennusmuoto: se pakkaa tiedot tehokkaasti ja lukee sarakepohjaisissa kyselyissä paljon CSV:tä nopeammin. arrow-paketti tarjoaa funktiot write_parquet() ja 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!')

Tietojen kirjoittaminen putkessa

Sekä write_csv() että saveRDS() palauttavat syötteensä näkymättömästi, joten niitä voidaan käyttää putken sisällä katkaisematta työnkulkua. Lisää putken keskelle kirjoitusvaihe tarkistuspisteeksi käyttämällä write_csv()-funktiota, jotta tulokset ovat toistettavia.

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)

Opas muodon valintaan

Sopivan tulostusmuodon valinta riippuu tavoitteestasi:

  • CSV/TSV: yleiskäyttöisiä ja ihmisen luettavia; kuka tahansa voi avata ne
  • RDS: R:stä R:ään; säilyttää kaikki tyypit ja attribuutit täsmälleen
  • xlsx: yrityskäyttäjille ja Excelin käyttäjille
  • Parquet: suurille aineistoille, analytiikkaputkille ja tuotantojärjestelmille
  • JSON: rajapinnoille ja sisäkkäisille tai hierarkkisille tiedoille (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')

Pikatarkistus

Mikä on saveRDS()-funktion keskeinen etu write_csv()-funktioon verrattuna R-tietojen tallentamisessa?

Kertaus: Tietojen kirjoittaminen

R:stä kirjoitettavien tietojen tärkeimmät kohdat:

  • write_csv(df, 'file.csv') — pilkuilla eroteltu, ei rivinimiä, UTF-8
  • write_tsv(df, 'file.tsv') — sarkaineroteltu tuloste
  • write_delim(df, file, delim='|') — mikä tahansa erotin
  • saveRDS(obj, 'file.rds') — R:n binäärimuoto, säilyttää kaikki tyypit
  • readRDS('file.rds') — palauttaa olion millä tahansa nimellä; load() palauttaa alkuperäiset nimet
  • writexl::write_xlsx() — Excel-tuloste ilman Javaa
  • arrow::write_parquet() — sarakepohjainen muoto suurille analyyttisille aineistoille
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
Aloita maksutta

Opi R tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
43
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”Datan kirjoittaminen useisiin muotoihin” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa R Academy-oppimispolun 3 oppituntia, myös oppitunnin “Datan kirjoittaminen useisiin muotoihin”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. R Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Datan kirjoittaminen useisiin muotoihin”?

Viekää data framet CSV-, Excel- ja RDS-muotoihin write_csv()- ja writexl-työkaluilla. Harjoittelet R Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni R Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin R Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Datan kirjoittaminen useisiin muotoihin”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä R Academy-oppitunnilla?

Kyllä. Jokainen R Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. CSV-tiedostojen lukeminen read_csv()-funktiolla
  2. TSV- ja kiinteän levyisen tiedostojen jäsentäminen
  3. Excel-tiedostojen tuominen readxl:llä
  4. Datan kirjoittaminen useisiin muotoihin
← Takaisin: R Academy