/ / Підмножина матриці, що містить тільки Дати - r, дата, підмножина

Піднабір матриці, що містить тільки Дати - r, дата, підмножина

Я отримав матрицю m, яка виглядає так:

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)

Записи в межах матриці Date об'єктів класу.

У мене є інтервал із:

start <- as.Date("2011-01-26")
end <- as.Date("2011-02-10")

Тепер я хочу виділити всі дати в матриці mякі потрапляють у цей інтервал (наприклад, з 9 по 14) і виводять їх у нову матрицю. Я не зміг виконати цей вибір, будь-який вхід дуже цінується! Я використовую lubridateупаковка в Р.

Форматування матриці m відображає частину першого рядка моєї початкової матриці дат, яка сама має dim = (96, 850).

EDIT1: відредаговані для ясності, "старт" і "кінець" були Date типи, але не позначені як такі.

Відповіді:

3 для відповіді № 1

Найкраще підійти до ваших дат як Date клас

# convert to Dates
m <- as.Date(m)
start <- as.Date(start)
end <- as.Date(end)

Використовуйте dplyr::between для фільтрації даних

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"

Це виводить вектор.

Для виводу матриці спробуйте щось подібне

n <- m
n[!dplyr::between(n, start, end)] <- NA
newm <- matrix(nrow=1, ncol=15, byrow=T, data=n)

1 для відповіді № 2

Тут використовується базовий метод R seq для створення дат між початком і кінцем і %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"

Зауважимо, що Date - це клас в R, як і матриця. Досить складно (мабуть, неможливо) зберігати дати в матриці як об'єкти Date. Натомість, вказані вище дані зберігаються як символи.

Це рішення перетворює початок і кінець на Дати за допомогою as.Date а потім використовує seq для створення вектора щоденних дат від початку до кінця. Потім вони перетворюються в символи і використовуються для порівняння елемента m %in%. Нарешті, [ використовується для вилучення бажаних елементів.