Narzędzia użytkownika

Narzędzia witryny


r_dplyr_kolumny

To jest stara wersja strony!


Czasowniki dplyr zarządzające kolumnami (zmiennymi)

Podsumowanie

Usuń niewymienione kolumny Pozostaw niewymienione kolumny
Zmień nazwy i/lub kolejność kolumn select() rename()
Stwórz nową kolumnę transmutate() mutate()
Zmień wartości kolumny transmutate() mutate(), mutate_each()

select

select(tablica, kolumna1, …)

  • Pozostawia w tablicy dplyr-a jedynie wymienione kolumny, układając je w takiej kolejności, w jakiej zostały wymienione.
    • Dodanie znaku - przed nazwą zmiennej spowoduje jej usunięcie.
  • Umożliwia również zmianę nazw kolumn - składnia: nowaNazwa = staraNazwa.
  • Dostępne są funkcje pomocnicze ułatwiające wybór wielu kolumn:
    • wszystkie kolumny pomiędzy dwoma wskazanymi: kolumnaOd : kolumnaDo;
    • kolumny, których nazwa (wszystkie przyjmują argument ignore.case umożliwiający pominięcie wielkości znaków):
      • kończy się na x: ends_with(x)
      • rozpoczyna się od x: starts_with(x)
      • zawiera x: contains(x)
      • pasuje do wyrażenia regularnego x: matches(x)
      • pasuje do sekwencji nazw: num_range(prefiks, wektorLiczb, liczbaZnakówLiczby)
        • np. num_range('p', 1:3, 2) pasuje do kolumn p01, p02, p03.

Przykład

dane = data.frame(arabska = 1:3, litera = c('a', 'b', 'c'), rzymska = c('I', 'II', 'III'))

select(dane, litera, id)
# wynikiem będzie:
#
# litera id
#      a  1
#      b  2
#      c  3

select(dane, ends_with('KA'))
select(dane, ends_with('ka'))
# wynikiem obydwu będzie:
#
# arabska rzymska
#       1       I
#       2      II
#       3     III

select(dane, ends_with('KA', FALSE))
# wynikiem będzie:
#
# ramka danych z zerową liczbą kolumn oraz 3 wierszami

select(dane, starts_with('ar'), litera)
# wynikiem obydwu będzie:
#
# arabska litera
#       1      a
#       2      b
#       3      c

rename

rename(tabela, nazwaPo1 = nazwaPrzed1, …)

  • Zmienia nazwy kolumn w tablicy dplyr-a.
    • Możliwa jest zmiana nazwy wielu kolumn jednocześnie.

Przykład

dane = data.frame(arabska = 1:3, litera = c('a', 'b', 'c'), rzymska = c('I', 'II', 'III'))

rename(dane, arabska2 = arabska, Litera = litera)
# wynikiem będzie:
#
# arabska2 Litera rzymska
#        1      a       I
#        2      b      II
#        3      c     III

mutate

mutate(tabela, nazwaKolumny1 = definicjaKolumny1, …)

  • Tworzy nowe kolumny w tablicy dplyr-a.
  • Jeśli na tablicy dplyr-a zostało określone grupowanie (np. czasownikiem group_by), wtedy obliczanie wartości odbywać się będzie w ramach tego podziału.
  • Jeśli nazwa tworzonej kolumny będzie się pokrywać z już istniejącą kolumną, dotychczasowe wartości kolumny zostaną nadpisane nowymi.

Przykład

dane = data.frame(arabska = 1:3, litera = c('a', 'b', 'c'), rzymska = c('I', 'II', 'III'))

mutate(dane, arabskaRzymska = paste(arabska, rzymska), arabskaLitera = paste(arabska, litera))
# wynikiem będzie:
#
# arabska litera rzymska arabskaRzymska arabskaLitera
#       1      a       I            1 I           1 a
#       2      b      II           2 II           2 b
#       3      c     III          3 III           3 c

dane = data.frame(grupa = c(1, 1, 2, 2, 2), wartosc = 1:5)

mutate(dane, srednia = mean(wartosc))
# wynikiem będzie:
#
#  grupa wartosc srednia
#      1       1       3
#      1       2       3
#      2       3       3
#      2       4       3
#      2       5       3

dane = group_by(dane, grupa)
mutate(dane, srednia = mean(wartosc))
# wynikiem będzie:
#
#  grupa wartosc srednia
#      1       1     1.5
#      1       2     1.5
#      2       3       4
#      2       4       4
#      2       5       4

mutate_each

mutate_each(tabela, funs(funkcja)

  • Nadpisuje wartości wszystkich kolumn w tablicy dplyr-a poprzez zastosowanie do nich wskazanej funkcji.
    • Jeśli do funs przekazanych zostanie wiele funkcji, powstanie tyle nowych kolumn (zmiennych), ile wynosi liczba przekazanych funkcji razy liczba kolumn w tablicy dplyr-a (patrz przykład).
  • Jeśli na tablicy dplyr-a zostało określone grupowanie (np. czasownikiem group_by), wtedy obliczanie wartości odbywać się będzie w ramach tego podziału.

Przykład

dane = data.frame(arabska = 1:3, litera = c('a', 'b', 'c'), rzymska = c('I', 'II', 'III'), stringsAsFactors = F)

mutate_each(dane, funs(min))
# wynikiem będzie:
#
# arabska litera rzymska
#       1      a       I
#       1      a       I
#       1      a       I

mutate_each(dane, funs(min, max))
# wynikiem będzie:
#
# arabska litera rzymska arabska_min litera_min rzymska_min arabska_max litera_max rzymska_max
#       1      a       I           1          a           I           3          c         III
#       2      b      II           1          a           I           3          c         III
#       3      c     III           1          a           I           3          c         III

transmutate

transmute(tabela, definicjaKolumny1, …)

  • Tworzy nowe kolumny w tablicy dplyr-a, jednocześnie usuwając z niej wszystkie pozostałe kolumny.
    • Jest odpowiednikiem złożenia: mutate() i select() wybierającego tylko kolumny stworzone przez mutate().
  • Jeśli na tablicy dplyr-a zostało określone grupowanie (np. czasownikiem group_by), wtedy obliczanie wartości odbywać się będzie w ramach tego podziału.
    • W takim wypadku zachowywane są również te zmienne (kolumny), które wyznaczają grupy.

Przykład

dane = data.frame(arabska = 1:3, litera = c('a', 'b', 'c'), rzymska = c('I', 'II', 'III'))

transmute(dane, arabskaRzymska = paste(arabska, rzymska), arabskaLitera = paste(arabska, litera))
# wynikiem będzie:
#
# arabskaRzymska arabskaLitera
#            1 I           1 a
#           2 II           2 b
#          3 III           3 c

dane = data.frame(grupa = c(1, 1, 2, 2, 2), wartosc = 1:5)

transmute(dane, srednia = mean(wartosc))
# wynikiem będzie:
#
# srednia
#       3
#       3
#       3
#       3
#       3

dane = group_by(dane, grupa)
transmute(dane, srednia = mean(wartosc))
# wynikiem będzie:
#
#  grupa srednia
#      1     1.5
#      1     1.5
#      2       4
#      2       4
#      2       4
r_dplyr_kolumny.1421679952.txt.gz · ostatnio zmienione: 2015/01/19 16:05 przez zozlak