Mam macierz m, która wygląda tak:
df <- c("2011-01-02", "2011-01-05", "2011-01-08", "2011-01-11", "2011-01-14",
"2011-01-17", "2011-01-20", "2011-01-23", "2011-01-26", "2011-01-29",
"2011-02-01", "2011-02-04", "2011-02-07", "2011-02-10", "2011-02-13")
m <- matrix(nrow = 1, ncol = 15, byrow = T, data = df)
Wpisy w macierzy są Date
obiekty klasy.
Mam przerwę z:
start <- as.Date("2011-01-26")
end <- as.Date("2011-02-10")
Teraz chcę wybrać wszystkie daty w macierzy mktóre mieszczą się w tym przedziale (np. cols 9 do 14) i wyprowadzają je do nowej macierzy. Nie mogłem wykonać tego wyboru, wszelkie dane wejściowe są doceniane! używam lubridate
pakiet w R.
Formatowanie macierzy m odzwierciedla część pierwszego wiersza mojej oryginalnej matrycy dat, która sama w sobie ma dim = (96, 850)
.
EDIT1: edytowane dla jasności, "start" i "koniec" były Date
typy, ale nie są oznaczone jako takie.
Odpowiedzi:
3 dla odpowiedzi № 1Najlepiej traktować swoje daty jako Date
klasa
# convert to Dates
m <- as.Date(m)
start <- as.Date(start)
end <- as.Date(end)
Posługiwać się dplyr::between
filtrować twoje dane
require(dplyr)
ans <- m[dplyr::between(m, start, end)] # m >= start && m <= end
# [1] "2011-01-26" "2011-01-29" "2011-02-01" "2011-02-04" "2011-02-07"
# [6] "2011-02-10"
To wyprowadza wektor.
Dla wyjścia macierzy, spróbuj czegoś takiego
n <- m
n[!dplyr::between(n, start, end)] <- NA
newm <- matrix(nrow=1, ncol=15, byrow=T, data=n)
1 dla odpowiedzi nr 2
Oto podstawowa metoda R z wykorzystaniem seq
generować daty pomiędzy początkiem i końcem oraz %in%
m[m %in% as.character(seq(as.Date(start), as.Date(end), by="day"))]
[1] "2011-01-26" "2011-01-29" "2011-02-01" "2011-02-04" "2011-02-07" "2011-02-10"
Należy zauważyć, że Date jest klasą w R, podobnie jak macierz. Jest dość trudne, (prawdopodobnie niemożliwe) przechowywanie dat w macierzy jako obiektów Date. Zamiast tego powyższe są przechowywane jako znaki.
To rozwiązanie konwertuje początek i koniec na Daty przy użyciu as.Date
a następnie używa seq
aby stworzyć wektor codziennych dat od początku do końca. Są one następnie konwertowane na znaki i używane do porównywania elementu w m użyciu %in%
. Wreszcie, [
służy do wyodrębniania pożądanych elementów.