Różnice między wybraną wersją a wersją aktualną.
Nowa wersja | Poprzednia wersja Ostatnia wersja Both sides next revision | ||
r_dplyr_wiersze [2014/12/17 09:40] zozlak utworzono |
r_dplyr_wiersze [2015/03/10 11:59] zozlak [filter] |
||
---|---|---|---|
Linia 5: | Linia 5: | ||
//**filter**(tablica, warunek1, ...)// | //**filter**(tablica, warunek1, ...)// | ||
- | * Pozostawia w //tablicy// tylko te wiersze, które spełniają **wszystkie** przekazane warunki. | + | * Pozostawia w [[r_dplyr_tablice|tablicy dplyr-a]] tylko te wiersze, które spełniają **wszystkie** przekazane warunki. |
* Pojedynczy warunek może być dowolnym wyrażeniem R, byleby ostatecznie zwracał wektor logiczny długości takiej, jak liczba wierszy //tablicy//. | * Pojedynczy warunek może być dowolnym wyrażeniem R, byleby ostatecznie zwracał wektor logiczny długości takiej, jak liczba wierszy //tablicy//. | ||
* Jeśli dane nie były jeszcze pobierane z serwera (np. czasownikiem collect()), dostępne są wyłącznie następujące funkcje i operatory R (zauważmy, że nie ma tam //grepl()//): | * Jeśli dane nie były jeszcze pobierane z serwera (np. czasownikiem collect()), dostępne są wyłącznie następujące funkcje i operatory R (zauważmy, że nie ma tam //grepl()//): | ||
Linia 11: | Linia 11: | ||
* funkcje matematyczne: abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceiling, cos, cosh, cot, coth, exp, floor, log, log10, round, sign, sin, sinh, sqrt, tan, tanh | * funkcje matematyczne: abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceiling, cos, cosh, cot, coth, exp, floor, log, log10, round, sign, sin, sinh, sqrt, tan, tanh | ||
* operatory porównań: <, <=, !=, >=, >, ==, %in% | * operatory porównań: <, <=, !=, >=, >, ==, %in% | ||
- | * operatory logiczne: boolean operations: &, &&, |, ||, !, xor | + | * operatory logiczne: &, &&, |, ||, !, xor |
+ | * **Jeśli warunek zawiera alternatywę (operator |), to należy wziąć go w nawias**, aby uniknąć problemów z priorytetem operatorów, np. //filter(tablica, a, b | c)// odfiltruje //(a i b) lub c//, a dopiero //filter(tablica, a, (b | c))// odfiltruje //a i (b lub c)// | ||
==== Przykład ==== | ==== Przykład ==== | ||
- | <code> | + | <code rsplus> |
t1 = data.frame(id = 11:16, zmienna1 = c('a', 'b', 'c', 'd', 'e', 'f')) | t1 = data.frame(id = 11:16, zmienna1 = c('a', 'b', 'c', 'd', 'e', 'f')) | ||
Linia 37: | Linia 38: | ||
//**slice**(tablica, wektorNumerówWierszy)// | //**slice**(tablica, wektorNumerówWierszy)// | ||
- | * Wybiera z //tablicy// wiersze o wskazanych numerach. | + | * Wybiera z [[r_dplyr_tablice|tablicy dplyr-a]] wiersze o wskazanych numerach |
+ | * jeśli numer wiersza jest ujemny, dany wiersz jest usuwany, jeśli dodatni, wybierany. | ||
* Odpowiednik R-owej składni //tablica[wektorNumerówWierszy, ]//. | * Odpowiednik R-owej składni //tablica[wektorNumerówWierszy, ]//. | ||
==== Przykład ==== | ==== Przykład ==== | ||
- | <code> | + | <code rsplus> |
t1 = data.frame(id = 11:16, zmienna1 = c('a', 'b', 'c', 'd', 'e', 'f')) | t1 = data.frame(id = 11:16, zmienna1 = c('a', 'b', 'c', 'd', 'e', 'f')) | ||
slice(t1, c(2, 4, 6)) | slice(t1, c(2, 4, 6)) | ||
Linia 53: | Linia 55: | ||
</code> | </code> | ||
- | ===== semi_join ===== | + | ===== distinct ===== |
+ | |||
+ | //**distinct**(tablica)// | ||
+ | |||
+ | * Usuwa z tablicy duplikaty (aby wiersze uznać za duplikaty, muszą mieć jednakowe wartości we wszystkich kolumnach). | ||
+ | |||
+ | ==== Przykład ==== | ||
+ | |||
+ | <code rsplus> | ||
+ | dane = data.frame(x = c(1, 1, 1), y = c(1, 2, 1)) | ||
+ | distinct(dane) | ||
+ | # wynikiem będzie: | ||
+ | # | ||
+ | # x y | ||
+ | # 1 1 | ||
+ | # 1 2 | ||
+ | </code> | ||
+ | |||
+ | ===== semi_join, intersect ===== | ||
//**semi_join**(tablica1, tablica2)// | //**semi_join**(tablica1, tablica2)// | ||
+ | |||
+ | //**intersect**(tablica1, tablica2)// | ||
* Pozostawia w //tablicy1// tylko te wiersze, które pasują do jakiegoś wiersza tablicy //tablica2//. | * Pozostawia w //tablicy1// tylko te wiersze, które pasują do jakiegoś wiersza tablicy //tablica2//. | ||
- | * Porównanie dokonywane jest tylko na podstawie kolumn wspólnych dla obydwu tablic. | + | * W wypadku //semi_join()// porównanie dokonywane jest tylko na podstawie kolumn wspólnych dla obydwu tablic. |
- | * **Uwaga!** Nie należy używać tego czasownika na tablicach, które nie zostały jeszcze pobrane z serwera czasownikiem //collect()// - implementacja tego czasownika po stronie serwera jest fatalnie ślamazarna. | + | * W wypadku //intersect()// obydwie tablice muszą posiadać identyczny zestaw kolumn. |
==== Przykład ==== | ==== Przykład ==== | ||
- | <code> | + | <code rsplus> |
t1 = data.frame(id = 1:3, zmienna1 = c('a', 'b', 'c')) | t1 = data.frame(id = 1:3, zmienna1 = c('a', 'b', 'c')) | ||
t2 = data.frame(id = 2:4, zmienna2 = c('x', 'y', 'z')) | t2 = data.frame(id = 2:4, zmienna2 = c('x', 'y', 'z')) | ||
Linia 72: | Linia 94: | ||
# 2 b | # 2 b | ||
# 3 c | # 3 c | ||
+ | |||
+ | intersect(t1, t2) | ||
+ | # wynikiem będzie: | ||
+ | # | ||
+ | # BŁĄD: not compatible | ||
+ | |||
+ | intersect(t1 %>% select(id), t2 %>% select(id)) | ||
+ | # wynikiem będzie: | ||
+ | # | ||
+ | # id | ||
+ | # 2 | ||
+ | # 3 | ||
</code> | </code> | ||
- | ===== anti_join ===== | + | ===== anti_join, setdiff ===== |
//**anti_join**(tablica1, tablica2)// | //**anti_join**(tablica1, tablica2)// | ||
- | * Pozostawia w //tablicy1// tylko te wiersze, które pasują do jakiegoś wiersza tablicy //tablica2//. | + | |
- | * Porównanie dokonywane jest tylko na podstawie kolumn wspólnych dla obydwu tablic. | + | //**setdiff**(tablica1, tablica2)// |
- | * **Uwaga!** Nie należy używać tego czasownika na tablicach, które nie zostały jeszcze pobrane z serwera czasownikiem //collect()// - implementacja tego czasownika po stronie serwera jest fatalnie ślamazarna. | + | |
+ | * Pozostawia w //tablicy1// tylko te wiersze, które nie pasują do żadnego wiersza tablicy //tablica2//. | ||
+ | * W wypadku //anti_join()// porównanie dokonywane jest tylko na podstawie kolumn wspólnych dla obydwu tablic. | ||
+ | * W wypadku //setdiff()// obydwie tablice muszą posiadać identyczny zestaw kolumn. | ||
==== Przykład ==== | ==== Przykład ==== | ||
- | <code> | + | <code rsplus> |
t1 = data.frame(id = 1:3, zmienna1 = c('a', 'b', 'c')) | t1 = data.frame(id = 1:3, zmienna1 = c('a', 'b', 'c')) | ||
t2 = data.frame(id = 2:4, zmienna2 = c('x', 'y', 'z')) | t2 = data.frame(id = 2:4, zmienna2 = c('x', 'y', 'z')) | ||
+ | |||
anti_join(t1, t2) | anti_join(t1, t2) | ||
# wynikiem będzie: | # wynikiem będzie: | ||
Linia 92: | Linia 130: | ||
# id zmienna1 | # id zmienna1 | ||
# 1 a | # 1 a | ||
+ | |||
+ | setdiff(t1, t2) | ||
+ | # wynikiem będzie: | ||
+ | # | ||
+ | # BŁĄD: not compatible | ||
+ | |||
+ | setdiff(t1 %>% select(id), t2 %>% select(id)) | ||
+ | # wynikiem będzie: | ||
+ | # | ||
+ | # id | ||
+ | # 1 | ||
+ | </code> | ||
+ | |||
+ | ===== sample_frac ===== | ||
+ | |||
+ | //**sample_frac**(tablica, odsetek, czyZeZwracaniem, wagi)// | ||
+ | |||
+ | * Pozostawia w //tablicy// losowo wybrane odsetek wierszy. | ||
+ | * Parametr określający, czy losować ze zwracaniem jest nieobowiązkowy. Jeśli nie zostanie określony, losowani odbędzie się bez zwracania. | ||
+ | * Parametr określający wagi jest nieobowiązkowy. Jeśli nie zostanie określony, wszystkie wiersze będą miały równe prawdopodobieństwa wylosowania. | ||
+ | |||
+ | ==== Przykład ==== | ||
+ | |||
+ | <code rsplus> | ||
+ | dane = data.frame(x = 1:10) | ||
+ | |||
+ | sample_frac(dane, 0.5) | ||
+ | # wynikiem będzie tablica o 5 wierszach, żadna wartość nie będzie się powtarzać | ||
+ | |||
+ | sample_frac(dane, 0.7, TRUE) | ||
+ | # wynikiem będzie tablica o 7 wierszach, wartości mogą się powtarzać | ||
+ | |||
+ | sample_frac(dane, 0.7, F, x) | ||
+ | # wynikiem będzie tablica o 7 wierszach, wartości nie będą się powtarzać, pradopodobieństwo wylosowania liczby będzie proporcjonalne do wartości liczby | ||
+ | </code> | ||
+ | |||
+ | ===== sample_n ===== | ||
+ | |||
+ | //**sample_n**(tablica, liczbaWierszy, czyZeZwracaniem, wagi)// | ||
+ | |||
+ | * Pozostawia w //tablicy// losowo wybraną liczbę wierszy. | ||
+ | * Parametr określający, czy losować ze zwracaniem jest nieobowiązkowy. Jeśli nie zostanie określony, losowani odbędzie się bez zwracania. | ||
+ | * Parametr określający wagi jest nieobowiązkowy. Jeśli nie zostanie określony, wszystkie wiersze będą miały równe prawdopodobieństwa wylosowania. | ||
+ | |||
+ | ==== Przykład ==== | ||
+ | |||
+ | <code rsplus> | ||
+ | dane = data.frame(x = 1:10) | ||
+ | |||
+ | sample_n(dane, 5) | ||
+ | # wynikiem będzie tablica o 5 wierszach, żadna wartość nie będzie się powtarzać | ||
+ | |||
+ | sample_n(dane, 7, TRUE) | ||
+ | # wynikiem będzie tablica o 7 wierszach, wartości mogą się powtarzać | ||
+ | |||
+ | sample_n(dane, 7, F, x) | ||
+ | # wynikiem będzie tablica o 7 wierszach, wartości nie będą się powtarzać, pradopodobieństwo wylosowania liczby będzie proporcjonalne do wartości liczby | ||
</code> | </code> |