Słownik metodologiczny · Przygotowanie danych

Plik CSV – jak działa format, przecinek czy średnik i jak zapisać dane w R

CSV to tabela zapisana jako zwykły tekst: rekord w wierszu, pola rozdzielone przecinkiem. Pokazujemy zasady RFC 4180, polski wariant ze średnikiem i zapis oraz odczyt w R.

W skrócie: Plik CSV to tabela zapisana jako zwykły tekst: każdy rekord w osobnym wierszu, pola rozdzielone przecinkiem, pola z przecinkiem lub cudzysłowem w cudzysłowie. W Polsce częsty jest wariant ze średnikiem i przecinkiem dziesiętnym. CSV nie przechowuje etykiet ani typów zmiennych, więc dołącz do niego książkę kodową.

Co to jest plik CSV?

Plik CSV (ang. comma-separated values, wartości rozdzielone przecinkami) to zwykły plik tekstowy z tabelą danych: każdy rekord zajmuje jeden wiersz, a pola w wierszu rozdziela przecinek. Format opisuje dokument RFC 4180 (Shafranovich, 2005), który zaznacza, że wcześniej nie było formalnej specyfikacji, więc programy różnie go interpretują. CSV otworzy prawie każdy program, ale plik zawiera tylko tekst. Nie przechowuje etykiet wartości ani typów zmiennych, tak jak plik .sav, dlatego opis zmiennych trzymaj osobno w książce kodowej.

Zasady zapisu

  • Pierwszy wiersz może być nagłówkiem z nazwami pól, a każdy wiersz powinien mieć tyle samo pól.
  • Pole zawierające przecinek, cudzysłów albo znak nowego wiersza ujmuje się w cudzysłów.
  • Cudzysłów wewnątrz pola zapisuje się podwójnie: "zmęczony, ""senny""".
  • Wiersze kończy para znaków CRLF, choć część programów używa innych końców wiersza (Shafranovich, 2005). W R taki koniec wiersza daje argument eol = "\r\n".

W krajach z przecinkiem dziesiętnym, także w Polsce, pliki CSV często rozdzielają pola średnikiem. W R obsługują je funkcje write.csv2() i read.csv2() (R Core Team, 2026).

Przykład

Tę samą tabelę trzech osób zapisano dwiema funkcjami R (dane przykładowe). Po write.csv() drugi rekord ma postać 2,"eksperymentalna",2.8,"zmęczony, ""senny""", a po write.csv2(): 2;"eksperymentalna";2,8;…. Plik ze średnikami wczytany funkcją read.csv() dał jedną kolumnę zamiast czterech. Plik z przecinkami po ponownym wczytaniu był identyczny z danymi wyjściowymi. Średni stres dwóch osób z wynikiem wyniósł 3.025, a brak danych u trzeciej osoby zapisano jako NA.

Jak opisać w pracy

Dane surowe udostępniono w pliku CSV (kodowanie UTF-8, separator pól: przecinek, kropka dziesiętna, braki danych oznaczone jako NA) wraz z książką kodową opisującą zmienne, zakresy i kody wartości.

Na co uważać

  • Separator i kodowanie ustal z odbiorcą. Podręcznik R zauważa, że w praktyce ważniejsze od zgodności ze standardem jest to, czy plik odczyta docelowy program. Polskie znaki zapisuj w UTF-8.
  • Jeden kod braku. Nie mieszaj w jednej kolumnie NA, pustych pól i „99”.
  • Plik tekstowy nie zna typów. Po wczytaniu sprawdź, czy liczby nie stały się tekstem.

CSV dobrze sprawdza się w pakiecie replikacyjnym. Eksport z formularzy online opisuje wpis Dane z Google Forms i LimeSurvey.

Przykład reprodukowalny

Zapis i odczyt CSV w R

Kod zapisuje tę samą tabelę w dwóch wariantach CSV, pokazuje zawartość plików i sprawdza, czy odczyt odtwarza dane.

write.csv() a write.csv2()

Dane wejściowe: 3 osoby: grupa, wynik stresu z jednym brakiem i pole tekstowe z przecinkiem i cudzysłowem (dane przykładowe).

Co odczytać: zawartość obu plików, liczbę kolumn po odczycie złą funkcją, wynik all.equal() i średnią stresu.

R
dane <- data.frame(id = 1:3, grupa = c("kontrolna", "eksperymentalna", "kontrolna"),
                   stres = c(3.25, 2.8, NA), uwagi = c("brak", "zmęczony, \"senny\"", ""))
f1 <- tempfile(fileext = ".csv")
write.csv(dane, f1, row.names = FALSE)                     # przecinek i kropka dziesiętna
cat(readLines(f1), sep = "\n")
f2 <- tempfile(fileext = ".csv")
write.csv2(dane, f2, row.names = FALSE)                    # średnik i przecinek dziesiętny
cat(readLines(f2), sep = "\n")
ncol(read.csv(f2))                                         # zła funkcja: jedna kolumna
wczytane <- read.csv(f1)
all.equal(wczytane, dane)                                  # czy zapis i odczyt zachowały dane
mean(wczytane$stres, na.rm = TRUE)
Wynik w R
"id","grupa","stres","uwagi"
1,"kontrolna",3.25,"brak"
2,"eksperymentalna",2.8,"zmęczony, ""senny"""
3,"kontrolna",NA,""
"id";"grupa";"stres";"uwagi"
1;"kontrolna";3,25;"brak"
2;"eksperymentalna";2,8;"zmęczony, ""senny"""
3;"kontrolna";NA;""
[1] 1
[1] TRUE
[1] 3.025

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje pakietów base i utils).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/

Najczęstsze pytania

Dlaczego plik CSV wczytuje się jako jedna kolumna?

Program spodziewa się innego separatora. Plik ze średnikami wczytaj w R funkcją read.csv2() albo podaj sep = ";", a plik z przecinkami funkcją read.csv().

Czy plik CSV zachowuje etykiety wartości z SPSS?

Nie. CSV zawiera tylko tekst w komórkach, bez etykiet i typów zmiennych. Wyeksportuj kody liczbowe albo etykiety i opisz je w książce kodowej.

Czym różni się write.csv od write.csv2 w R?

write.csv() rozdziela pola przecinkiem i stosuje kropkę dziesiętną. write.csv2() używa średnika i przecinka dziesiętnego. Do odczytu służą odpowiednio read.csv() i read.csv2().

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. R Core Team. (2026). R data import/export (Version 4.6.1). R Foundation for Statistical Computing. https://cran.r-project.org/doc/manuals/r-release/R-data.html ● Otwarty dostęp
  2. Shafranovich, Y. (2005). Common format and MIME type for comma-separated values (CSV) files (RFC 4180). RFC Editor. https://doi.org/10.17487/rfc4180 ● Otwarty dostęp

Cytowania BibTeX

@techreport{rcoreteam2026rdata, author={{R Core Team}}, title={{R data import/export}}, year={2026}, institution={R Foundation for Statistical Computing}, url={https://cran.r-project.org/doc/manuals/r-release/R-data.html}}
@techreport{shafranovich2005common, author={Shafranovich, Yakov}, title={{Common format and MIME type for comma-separated values (CSV) files}}, year={2005}, institution={RFC Editor}, doi={10.17487/rfc4180}}
R