/ / Podzestaw macierz zawierającą tylko daty - r, datę, podzbiór

Podzbiór macierz zawierający tylko Daty - r, data, podzbiór

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 lubridatepakiet 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 № 1

Najlepiej 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.