(II) : Klasa data.grame: data.frame

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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *