У меня очень большой фрейм данных (около 1 ГБ и 1 миллион строк), который имеет наблюдения с 10 до 16 часов. Я хотел бы сделать некоторые графики с geom_step, которые приближаются к 1: 00: 00-1: 00: 05pm, поэтому я решил, что для экономии памяти и времени было бы быстрее подмножить исходные данные. (вместо того, чтобы рисовать все и затем увеличивать). К сожалению, пока что вскрытие не является вариантом. Поскольку я работаю с geom_step, мне нужно обернуть подмножество до и после значений, иначе все будет неправильно построено.Обтекание подмножества кадра данных с ближайшими наблюдениями по обе стороны от подмножества в факторе
Вот набор данных примера, который на самом деле гораздо меньше, чем мои данные, но принцип там:
set.seed(2)
c1 <- sort(sample(round(runif(10,1,10)*10), 10 , replace = TRUE))
c2 <- sample(c("A", "C", "T"), 10, replace = TRUE)
c4 <- round(runif(10)*1000)
d1 <- c(5, 12, c1, 96, 97, 98, 100)
d2 <- c("B", "C", c2, "B", "T", "T", "A")
d3 <- c(300, 400, c4, 200, 300, 300, 100)
dcat2 <- c(sample(1:2, 14, replace = TRUE), 1,1)
mydat <- data.frame(time = d1, category = d2, category2 = dcat2 , inventory = d3)
print(mydat)
# time category category2 inventory
# 1 5 B 2 300
# 2 12 C 1 400
# 3 27 C 1 10
# 4 52 C 1 165
# 5 59 T 2 810
# 6 62 A 2 869
# 7 62 C 2 514
# 8 73 C 1 627
# 9 85 A 2 844
# 10 95 C 2 285
# 11 95 T 1 667
# 12 95 A 1 150
# 13 96 B 2 200
# 14 97 T 2 300
# 15 98 T 1 300
# 16 100 A 1 100
require(ggplot2)
p <- ggplot(data=mydat, aes(x = time, y = inventory, group = category, col = category)) +
geom_step() +
facet_grid(.~category2)
print(p)
q <- ggplot(data=mydat, aes(x = time, y = inventory, group = category, col = category)) +
geom_step() +
facet_grid(.~category2) +
coord_cartesian(xlim = c(80,98))
print(q)
Этот участок работает, но так как мои реальные данные настолько велики, что нужно навсегда сюжет. Я хотел бы также ступенчатого участка следует считать, чтобы начать с нуля в момент времени = 0 и удерживать последнее значение не было до времени = 100, вместо того, чтобы просто исчезнуть и не появляться из ниоткуда, как это делает в p
и q
Следующее в большей степени соответствует тому, что я пытаюсь сделать. Это дает ошибку, так что мне нужно будет обернуть кадр mydat.zoom
данных с использованием самых последних наблюдений (раньше), и последнее наблюдение изнутри mydat.zoom
(после), для каждого взаимодействия категории и category2
require(dplyr)
mydat.zoom <- filter(mydat, time >80, time < 98)
r <- ggplot(data=mydat.zoom, aes(x = time, y = inventory, group = category, col = category)) +
geom_step() +
facet_grid(.~category2)
print(r)
дает оценку ошибка, потому geom_step
требует, по крайней мере, 2 точки, когда графики в гранях, но некоторые из них были отрезаны Подменят до времени между 80 и 98.
Просьбы предложить эффективный способ поиска, для каждого фактора, то последнее наблюдение перед окном масштабирования и способ скопировать последнее наблюдение и обернуть окно масштабирования в них (или другое решение!)
«c3», как представляется, отсутствует. – steveb
Я решил решить эту проблему с тех пор, но не успел вернуться к моему вопросу, чтобы добавить решение. Я использовал пакет data.table (возможно, использовал dplyr), но решение, приведенное ниже, эффективно решает проблему. require (data.table) mydat.zoom <- rbind (mydat [время <80, .SD [.N], by =.(категория1, категория2)], mydat [время> = 80 и время hi, 98], mydat [время> 98, .SD [1], by =. (category1, category2)]) – user5364303