Klasa data.frame jest macierzową klasą listy trybów. Ważne są ramki danych i sposób ich użycia. Wiele zestawów danych dostępnych dla R to ramki danych. Gdy dane są odczytywane ze źródeł zewnętrznych, wiele funkcji dokonujących odczytu tworzy ramki danych. Nauczenie się, jak pracować z ramkami danych i tworzyć je, przynosi duże korzyści. Ramki danych zawierają dane atomowe w wierszach i kolumnach. W kolumnie wszystkie dane muszą być w tym samym trybie. Tryb między kolumnami może się zmienić. Ponieważ ramki danych nie muszą mieć tylko jednego trybu, ramki danych stanowią specjalny rodzaj listy. Dostęp do elementów ramki danych można uzyskać jak macierze lub podobne listy, co czyni ramki danych bardziej uniwersalnymi niż zwykła lista. Domyślnie kolumny przyjmują nazwy, które odzwierciedlają to, co znajduje się w oryginalnych obiektach tworzących ramkę danych. Funkcje data.frame(), as.data.frame() i is.data.frame() wszystkie istnieją w R. W data.frame() obiekty, które mają być zawarte w ramce danych, są wyświetlane jako pierwsze, oddzielone przecinki. Obiektami może być dowolny obiekt w trybie atomowym lub listy składające się z kolumn atomowych lub po prostu surowe dane. Jeśli obiekt składa się z więcej niż jednej kolumny, jak niektóre macierze i listy, wówczas każda kolumna w oryginalnym obiekcie staje się kolumną w ramce danych. W przeciwnym razie każdy obiekt staje się kolumną. Jeśli kolumny miały nazwy w oryginalnych obiektach, nazwy te są domyślnie przenoszone do ramki danych. Obiekty użyte do utworzenia ramki danych nie muszą mieć tej samej długości (lub liczby wierszy dla macierzy), ale muszą być wielokrotnościami długości. Numer wierszy w ramce danych będzie równa długości najdłuższej kolumny. Dane w innych kolumnach będą cyklicznie, aż kolumna będzie miała odpowiednią liczbę wierszy. Na przykład:
> a.list
[[1]]
a1 a2
[1,] 1 7
[2,] 2 8
[3,] 3 9
[4] 4 4
[5,] 5 11
[6,] 6 12
[[2]]
[1] „abc” „cde”
>
> data.frame (a.list, 1: 3)
a1 a2 c..abc …. cde .. X1.3
1 1 7 abc 1
2 2 8 cde 2
3 3 9 abc 3
4 4 10 cde 1
5 5 11 abc 2
6 6 12 cde 3
Zauważ, że R utworzył nazwy dla trzeciej i czwartej kolumny, a obie trzecia i czwarta kolumna cyklicznie. Funkcja data.frame() oprócz czterech obiektów ma cztery argumenty tworzą ramkę danych. Pierwszy argument to row.names, który przypisuje nazwy do wierszy i domyślnie ma wartość NULL, co oznacza, że nie przypisano żadnych nazw. Drugi argument to check.rows, który jest argumentem logicznym i sprawdza spójność długości i nazw wierszy, jeśli jest ustawiony na PRAWDA. Wartość domyślna to FAŁSZ. Trzeci argument to check.names, który jest również logiczny i który sprawdza, czy nazwy kolumn są poprawne pod względem składniowym i poprawia nazwy, które nie są. Domyślną wartością check.names jest PRAWDA. Ostatni argument to stringsAsFactors. Domyślnie data.frame() konwertuje dowolną kolumnę zawierającą dane znakowe na czynnik. Argument stringsAsFactors jest zmienną logiczną. Jeśli ustawiono na PRAWDA, czynniki są tworzone. Jeśli ustawione na FAŁSZ, kolumny znaków pozostają kolumnami znaków trybu. Rzeczywista wartość domyślna to default.stingsAsFactors(). Wartość default.stringsAsFactors() jest ustawiona w options () (rozdział 15) i domyślnie ma wartość TRUE, ale można ją zmienić w options(). Funkcja I() może być używana do konfigurowania ramek danych. Ta funkcja to inny sposób na powstrzymanie data.frame() od konwersji wektora znaków na czynniki. Również I() zapewnia, że dla macierzy struktura kolumny jest zachowana w ramce danych. Obiekt w wywołaniu data.frame () zawarty w I() będzie traktowany jako jeden element ramki danych, nawet jeśli obiekt zawiera więcej niż jedną kolumnę. Obiekty zawarte w I() nie cyklicznie.
Na przykład:
> mat
one two
row 1 1 6
row 2 2 7
row 3 3 8
row 4 4 9
row 5 5 10
> a.char
[1] “a1” “a2” “a3” “a4” “a5” “a6” “a7” “a8” “a9” “a10”
> data.frame(mat,a.char)
one two a.char
1 1 6 a1
2 2 7 a2
3 3 8 a3
4 4 9 a4
5 5 10 a5
6 1 6 a6
7 2 7 a7
8 3 8 a8
9 4 9 a9
10 5 10 a10
Warning message:
In data.frame(mat, a.char) :
row names were found from a short variable and have been discarded
> data.frame(mat,a.char)[[3]]
[1] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10
Levels: a1 a10 a2 a3 a4 a5 a6 a7 a8 a9
Warning message:
In data.frame(mat, a.char) :
row names were found from a short variable and have been discarded
> data.frame(I(mat),a.char)
Error in data.frame(I(mat), a.char) :
arguments imply differing number of rows: 5, 10
> data.frame(I(mat),I(a.char[1:5]))
mat.one mat.two a.char.1.5.
row1 1 6 a1
row2 2 7 a2
row3 3 8 a3
row4 4 9 a4
row5 5 10 a5
> data.frame(I(mat),I(a.char[1:5]))[[1]]
one two
row1 1 6
row2 2 7
row3 3 8
row4 4 9
row5 5 10
> data.frame(I(mat),I(a.char[1:5]))[[2]]
[1] “a1” “a2” “a3” “a4” “a5”
Jeśli nazwy wierszy nie zostaną wprowadzone w wywołaniu data.frame(), nazwy wierszy są pobierane z pierwszej kolumny, jeśli pierwsza kolumna ma etykiety wierszy i nie wykonuje cyklu. W przeciwnym razie nazwy wierszy są ustawione na 1, 2, 3 itd. Na przykład:
> z.vec
istrue isfalse
TRUE FALSE
>
> mat[1:4,]
one two
row1 1 6
row2 2 7
row3 3 8
row4 4 9
>
> y.vec
fac1 fac2 fac3 fac4
“y1” “y2” “y3” “y4”
>
> data.frame(z.vec, mat[1:4,], y.vec)
z.vec one two y.vec
1 TRUE 1 6 y1
2 FALSE 2 7 y2
3 TRUE 3 8 y3
4 FALSE 4 9 y4
Warning message:
In data.frame(z.vec, mat[1:4, ], y.vec) :
row names were found from a short variable and have been discarded
>
> data.frame(mat[1:4,], y.vec, z.vec)
one two y.vec z.vec
row1 1 6 y1 TRUE
row2 2 7 y2 FALSE
row3 3 8 y3 TRUE
row4 4 9 y4 FALSE
Funkcja as.data.frame() próbuje przymusić obiekt do ramki danych. Jeśli obiekt jest listą złożoną z elementów atomowych lub jest obiektem trybu atomowego, wówczas as.data.frame() tworzy ramkę danych z obiektu. W przeciwnym razie data.frame() podaje błąd. Ta funkcja pobiera trzy argumenty: row.names, opcjonalny i stringSsFactors. Argumenty row.names i stringsAsFactors zachowują się tak samo, jak w data.frame(). Argument opcjonalny jest zmienną logiczną, która, jeśli jest ustawiona na PRAWDA, informuje as.data.frame(), że ustawianie nazw wierszy i konwersja nazw kolumn są opcjonalne. Jeśli ustawiono na PRAWDA i jeśli parametr row.names ma wartość NULL, nazwy wierszy są ustawione na „”. Wartość domyślna dla opcjonalnej to FAŁSZ. Funkcja is.data.frame() sprawdza, czy obiekt należy do klasy data.frame, a jeśli tak, zwraca wartość PRAWDA. W przeciwnym razie is.data.frame() zwraca FALSE. Funkcje as.matrix() i data.matrix() można wykorzystać do konwersji ramki danych na macierz. Więcej informacji na temat dwóch rodzajów konwersji znajduje się w sekcji dotyczącej klasy macierzy. Aby uzyskać więcej informacji na temat data.frame (), wpisz ?data.frame po znaku zachęty R. Aby uzyskać więcej informacji na temat as.data.frame() i is.data.frame (), wpisz ?as.data.frame po znaku zachęty R. Aby uzyskać więcej informacji o I(), wpisz ?I w wierszu polecenia R.