W R, gdy pracujesz z wektorami, ludzie często wolą pracować nad całym wektorem naraz, zamiast przepuszczać go (patrz na przykład dyskusja this).
W pewnym sensie R ma wbudowany filtr i redukuje funkcje: sposób, w jaki można wybrać podzestawy wektora. Są bardzo przydatne w R, i jest kilka sposobów na zrobienie tego - pokażę ci parę, ale dowiesz się więcej, jeśli przeczytasz o R i spojrzysz na kod innych ludzi na stronie takiej jak ta. Rozważę też przeglądanie ?which
i ?'['
, które mają więcej przykładów niż tutaj.
Pierwszy sposób polega po prostu na wybraniu żądanych elementów.Można to wykorzystać, jeśli wiesz indeksy pierwiastków chcesz:
x <- letters[1:10]
> x
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
Jeśli chcemy tylko pięć pierwszych liter, możemy napisać:
x[1:5]
x[c(1,2,3,4,5)] # a more explicit version of the above
można również wybrać, które elementy, które nIE Chcą za pomocą znaku minus, na przykład:
x[-(6:10)]
Innym sposobem wyboru elementów jest za pomocą wektora logiczną:
x <- 1:5
selection <- c(FALSE, TRUE, FALSE, TRUE, FALSE)
x[selection] # only the second and fourth elements will remain
Jest to ważne, ponieważ możemy stworzyć taki wektor poprzez umieszczenie wektora w funkcji porównania:
selection <- (x > 3)
> selection
[1] FALSE FALSE FALSE TRUE TRUE
x[selection] # select all elements of x greater than 3
x[x > 3] # a shorthand version of the above
Po raz kolejny możemy wybrać przeciwieństwo porównania używamy (zauważ, że od jest logiczna, używamy !
i nie -
):
x[!(x > 3)] # select all elements less than or equal to 3
Jeśli chcesz robić porównań wektorowej, należy wziąć pod uwagę funkcję %in%
. Na przykład:
x <- letters[1:10]
> x %in% c("d", "p", "e", "f", "y")
[1] FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
# Select all elements of x that are also "d", "p", "e", "f", or "y"
x[x %in% c("d", "p", "e", "f", "y")]
# And to select everything not in that vector:
x[!(x %in% c("d", "p", "e", "f", "y"))]
Powyższe przykłady to tylko kilka przykładów; Zdecydowanie polecam dokumentację. Wiem, że to jest długi słupek po już zaakceptowane odpowiedź, ale coś takiego jest bardzo ważna i rozumiejąc to będzie zaoszczędzić dużo czasu i bólu w przyszłości, jeśli jesteś nowy w R, więc pomyślałem, Udostępniam ci kilka sposobów na zrobienie tego z tobą.
W tym przypadku może to być nawet krótszy, nie naprawdę potrzebne '== 1 'od' '%% będzie tylko powrocie 0 i 1 roku. Użyj 'sum (x %% 2)'. To może być trochę szybsze, ponieważ nie generujesz logicznych i nie konwertujesz ich z powrotem na numeryczne. Niektórzy mogą znaleźć dłuższa wersja bardziej czytelny (a jeśli były, aby rozwinąć to patrząc na numery, które są lub nie są wielokrotnością czymś innym niż 2 wtedy trzeba dłuższą wersję. –