Ramka danych R: jak tworzyć, dołączać, wybierać i podzbiór
⚡ Inteligentne podsumowanie
R Data Frame przechowuje kolumny różnych typów o równej długości, co czyni ją standardową prostokątną strukturą do analizy. Nawiasy kwadratowe dzielą wiersze i kolumny, znak dolara dociera do kolumny, a funkcja subset() filtruje według warunku.

Co to jest ramka danych?
A ramka danych to lista wektorów o równej długości. Macierz zawiera tylko jeden typ danych, podczas gdy ramka danych akceptuje różne typy danych (liczbowe, znakowe, czynnikowe itd.).
Definicja ta umieszcza ramkę danych pomiędzy dwoma sąsiadami, których będziesz stale spotykać w R.A. matryca jest prostokątny, ale jednoczęściowy i podstęp jest wielotypowy, ale nierówny. Ramka danych pożycza jedną właściwość od każdego z nich.
| Structure | Typy kolumn | Długości elementów | Typowe zastosowanie |
|---|---|---|---|
| wektor | Tylko jeden typ | Pojedyncza sekwencja | Jedna zmienna |
| Matrix | Tylko jeden typ | Prostokątny | Algebra numeryczna |
| Lista | Dowolna mieszanka typów | Może się różnić w zależności od elementu | Dowolne kolekcje |
| Ramka danych | Dowolna mieszanka typów | Każda kolumna ma taką samą długość | Analiza tabelaryczna |
Ponieważ ramka danych jest w rzeczywistości listą znajdującą się pod spodem, akcesory używane na listach działają także tutaj, dlatego znak dolara pojawia się ponownie w dalszej części tego samouczka.
Jak utworzyć ramkę danych
Możemy utworzyć ramkę danych w R przekazując zmienne a, b, c i d do funkcji data.frame(). Możemy utworzyć ramkę danych i nadać kolumnom nazwy za pomocą names(), po prostu określając nazwę każdej zmiennej.
data.frame(df, stringsAsFactors = TRUE)
Argumenty:
- df: Może to być macierz do przekształcenia w ramkę danych lub zbiór zmiennych do połączenia
- ciągiAsFactors: Kontroluje, czy wektory znaków stają się kolumnami czynnikowymi. Domyślna wartość fabryczna wynosiła TRUE w starszych wersjach i FALSE od R 4.0.0, więc należy ją jawnie przekazać, gdy zachowanie ma znaczenie.
Możemy utworzyć ramkę danych w R dla naszego pierwszego zestawu danych, łącząc cztery zmienne o tej samej długości.
# Create a, b, c, d variables a <- c(10,20,30,40) b <- c('book', 'pen', 'textbook', 'pencil_case') c <- c(TRUE,FALSE,TRUE,FALSE) d <- c(2.5, 8, 10, 7) # Join the variables to create a data frame df <- data.frame(a,b,c,d) df
Wyjście:
## a b c d ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0 ## 3 30 textbook TRUE 10.0 ## 4 40 pencil_case FALSE 7.0
Każdy wektor stał się kolumną, a cztery wartości w każdym wektorze stały się czterema wierszami. Należy zauważyć, że argumenty były nienazwane, więc R wyprowadził nagłówki kolumn z samych nazw zmiennych.
Widzimy, że nagłówki kolumn mają taką samą nazwę jak zmienne. Nazwę kolumny w R możemy zmienić za pomocą funkcji Names(). Sprawdź poniższy przykład tworzenia ramki danych w R:
# Name the data frame names(df) <- c('ID', 'items', 'store', 'price') df
Wyjście:
## ID items store price ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0 ## 3 30 textbook TRUE 10.0 ## 4 40 pencil_case FALSE 7.0
Przypisanie do names() powoduje zastąpienie wszystkich nagłówków naraz, więc wektor zastąpienia musi zawierać dokładnie jeden wpis na kolumnę. Aby zmienić nazwę pojedynczej kolumny, należy zaindeksować wektor names, np. names(df)[2] <- 'product'.
# Print the structure
str(df)
Wyjście:
## 'data.frame': 4 obs. of 4 variables: ## $ ID : num 10 20 30 40 ## $ items: Factor w/ 4 levels "book","pen","pencil_case",..: 1 2 4 3 ## $ store: logi TRUE FALSE TRUE FALSE ## $ price: num 2.5 8 10 7
Uwaga dotycząca wersji. Powyższy wynik został wygenerowany w wersji R starszej niż 4.0.0, w której funkcja data.frame() domyślnie konwertowała wektory znaków na czynniki, dlatego elementy są raportowane jako czynniki z czterema poziomami. W podstawowej dokumentacji R odnotowano, że ta domyślna wartość jest nowa w fabryce. zmieniono na stringsAsFactors = FALSE dla R 4.0.0Uruchomienie tego samego kodu w bieżącej wersji pozostawia elementy jako zwykłą kolumnę znakową, a funkcja str() zamiast tego drukuje chr. Dodaj stringsAsFactors = TRUE do wywołania data.frame(), aby odtworzyć wydruk, lub odczytaj samouczek dotyczący czynników na wypadek, gdyby czynniki były rzeczywiście potrzebne.
Wytnij ramkę danych
Po zbudowaniu ramki, kolejnym zadaniem jest wyciągnięcie jej fragmentów. Wycinanie to podstawowy sposób R, który wykorzystuje te same nawiasy kwadratowe co wektory, tylko z dwiema pozycjami zamiast jednej.
Możliwe jest wykonanie operacji SLICE w ramce danych. Wybieramy wiersze i kolumny do zwrócenia w nawiasach kwadratowych, poprzedzone nazwą ramki danych.
Ramka danych składa się z wierszy i kolumn, df[A, B]. A reprezentuje wiersze, a B kolumny. Możemy dokonać podziału, określając wiersze i/lub kolumny.
Na poniższym rysunku 1 lewa część przedstawia wydziwianie, a prawa część to kolumny. Należy pamiętać, że symbol : oznacza do. Na przykład 1:3 ma na celu wybranie wartości z 1 do 3.
Na poniższym diagramie pokazujemy, jak uzyskać dostęp do różnych selekcji ramki danych:
- Żółta strzałka wybiera rząd 1 w kolumna 2
- Zielona strzałka wybiera wydziwianie 1 do 2
- Czerwona strzałka wybiera kolumna 1
- Niebieska strzałka wybiera wydziwianie 1 do 3 i kolumny 3 do 4
Zauważ, że jeśli pozostawimy lewą część pustą, R wybierze wszystkie rzędy. Analogicznie, jeśli pozostawimy prawą część pustą, R dokona wyboru wszystkie kolumny.
Kod możemy uruchomić w konsoli:
## Select row 1 in column 2
df[1,2]
Wyjście:
## [1] book ## Levels: book pen pencil_case textbook
Linia „Levels” pojawia się, ponieważ „Items” jest czynnikiem w tej sesji. W wersji R 4.0.0 i nowszych to samo wywołanie wyświetla pojedynczy ciąg „book” bez linii „Levels”.
## Select Rows 1 to 2
df[1:2,]
Wyjście:
## ID items store price ## 1 10 book TRUE 2.5 ## 2 20 pen FALSE 8.0
## Select Columns 1
df[,1]
Wyjście:
## [1] 10 20 30 40
Wybranie pojedynczej kolumny za pomocą df[,1] powoduje usunięcie ramki i zwrócenie zwykłego wektora. Dodaj drop = FALSE, jak w df[, 1, drop = FALSE], gdy zamiast tego potrzebna jest jednokolumnowa ramka danych.
## Select Rows 1 to 3 and columns 3 to 4
df[1:3, 3:4]
Wyjście:
## store price ## 1 TRUE 2.5 ## 2 FALSE 8.0 ## 3 TRUE 10.0
Można również wybrać kolumny wraz z ich nazwami. Na przykład poniższy kod:tracma dwie kolumny: ID i sklep.
# Slice with columns name df[, c('ID', 'store')]
Wyjście:
## ID store ## 1 10 TRUE ## 2 20 FALSE ## 3 30 TRUE ## 4 40 FALSE
Nazwy są bezpieczniejsze niż pozycje w kodzie produkcyjnym, ponieważ wstawianie lub zmiana kolejności kolumn bezgłośnie zmienia to, do czego odwołuje się df[, 3], podczas gdy df[, 'store'] cały czas wskazuje na te same dane.
Dołącz kolumnę do ramki danych
Możesz również dodać kolumnę do ramki danych. Musisz użyć symbolu $, aby nazwać nową zmienną i dodać kolumnę do ramki danych w R.
# Create a new vector quantity <- c(10, 35, 40, 5) # Add `quantity` to the `df` data frame df$quantity <- quantity df
Wyjście:
## ID items store price quantity ## 1 10 book TRUE 2.5 10 ## 2 20 pen FALSE 8.0 35 ## 3 30 textbook TRUE 10.0 40 ## 4 40 pencil_case FALSE 7.0 5
Uwaga: Liczba elementów w wektorze musi być równa liczbie elementów w ramce danych. Wykonanie poniższego polecenia w celu dodania kolumny do ramki danych w R
quantity <- c(10, 35, 40)
# Add `quantity` to the `df` data frame
df$quantity <- quantity
Daje błąd:
Error in `lt;-.data.frame`(`*tmp*`, quantity, value = c(10, 35, 40))
replacement has 3 rows, data has 4
Komunikat podaje nazwę operatora zastępowania dla ramek danych i określa obie wartości, więc dokładnie wskazuje, co należy poprawić. R przetwarza zamiennik tylko wtedy, gdy jego długość dzieli liczbę wierszy równo, dlatego wartość o długości 1, taka jak df$currency <- 'EUR', jest akceptowana, a wektor o długości 3, obejmujący cztery wiersze, jest odrzucany. Funkcja cbind() dodaje kolumnę w ten sam sposób, a rbind() jest jej odpowiednikiem w dodawaniu wierszy.
Wybierz kolumnę ramki danych
Czasami musimy zapisać kolumnę ramki danych do wykorzystania w przyszłości lub wykonać operację na kolumnie. Możemy użyć znaku $, aby wybrać kolumnę z ramki danych.
# Select the column ID
df$ID
Wyjście:
## [1] 1 2 3 4
Przeczytaj uważnie ten wynik. Identyfikator został zbudowany z wektora c(10, 20, 30, 40), więc konsola na żywo wyświetla tutaj 10 20 30 40; liczby 1 2 3 4 pokazane powyżej to pozycje wierszy, a nie wartości zapisane. Znak [1] na początku wiersza to po prostu indeks pierwszego elementu w tym wierszu, a nie część danych.
Trzy trasy docierają do tej samej kolumny: df$ID, df[['ID']] i df[, 'ID']. Znak dolara wykonuje częściowe dopasowanie, więc df$I nadal znalazłoby ID, co jest wygodne na konsoli, ale ryzykowne w zapisanym skrypcie.
Podzbiór ramki danych
W poprzedniej sekcji wybraliśmy całą kolumnę bez warunku. Jest to możliwe podzbiór na podstawie tego, czy dany warunek był spełniony, czy też nie.
Używamy funkcji subset().
subset(x, condition) arguments: - x: data frame used to perform the subset - condition: define the conditional statement
Chcemy zwrócić tylko te przedmioty, których cena jest wyższa niż 5, dlatego możemy zrobić:
# Select price above 5
subset(df, subset = price > 5)
Wyjście:
ID items store price 2 20 pen FALSE 8 3 30 textbook TRUE 10 4 40 pencil_case FALSE 7
Etykiety wierszy 2, 3 i 4 to oryginalne nazwy wierszy przeniesione z df, co pozwala stwierdzić, że pierwszy wiersz został odfiltrowany. Funkcja subset() akceptuje również argument SELECT do jednoczesnego wyboru kolumn, a równoważna forma nawiasowa to df[df$price > 5, ]. Forma nawiasowa zachowuje wiersze NA, w których brakuje warunku, podczas gdy subset() je pomija, więc te dwie formy nie zawsze są zamienne.

![Składnia podziału ramki danych R df[A, B] z wierszami po lewej stronie przecinka i kolumnami po prawej stronie](https://www.guru99.com/images/r_programming/032918_1452_RDataFrames1.png)
