Как я могу изменить индексы вектора R? - PullRequest
0 голосов
/ 06 июня 2018

Я хотел бы представить в виде линий результаты различных случайных векторов (выглядят как случайные блуждания), чтобы каждый из них следовал в последовательности после предыдущего.

Чтобы сделать это,Я бы хотел, чтобы индексирование второго вектора начиналось там, где заканчивался первый.

Например, в случае

a <- cumsum(rnorm(10))
b <- cumsum(rnorm(10))
head(a)
[1] -0.03900184 -0.37913568 -0.42521156
head(b)
[1]  1.3861861 -0.2418804  1.1159065

Оба вектора естественным образом индексируются от [1] до [10].Поэтому, если я нанесу их на график, они будут перекрываться (левый график), в то время как я хотел бы, чтобы b следовал за a в оси x (правый график):

plot(a, type = "l", xlim=c(0,20), ylim=c(-10,10), xlab="", ylab="", col=2)
lines(b, col=3)

enter image description here

Добавление b к a кажется проспектом, но когда я задаю результирующий вектор, я снова получаю вектор, начинающийся с нуля ...

Ответы [ 4 ]

0 голосов
/ 06 июня 2018

Если для вас важен индекс точки данных, я предполагаю, что вы работаете с данными типа временного ряда.Вы должны рассмотреть индексирование временных рядов создания вашего объекта и подмножество для желаемой манипуляции.Вот пример

foo <- ts(1:10, frequency = 1, start = 1)

# Subset using time series indexing
foo1 <- ts(foo[1:5], start = index(foo)[1], frequency = frequency(foo))
foo6 <- ts(foo[6:10], start  = index(foo)[6], frequency = frequency(foo))

# Combine using appropriate index    
fooNew <- ts(c(foo1, foo6), start = start(foo1), frequency = frequency(foo1))
0 голосов
/ 06 июня 2018

Мы можем создать новый b с NA с до length(a) -1, а затем добавить последнее значение a, затем добавить b и затем использовать этот new_b в lines аргумент.

set.seed(1)

a <- cumsum(rnorm(10))
b <- cumsum(rnorm(10))

new_b <- c(rep(NA, length(a)-1),a[length(a)], b)

plot(a, type = "l", xlim=c(0,20), ylim=c(-10,10), xlab="", ylab="", col=2)
lines(new_b, col=3)

enter image description here

0 голосов
/ 06 июня 2018

Как насчет этого, используя ggplot2?

library(tidyverse);
set.seed(2017);
a <- cumsum(rnorm(10))
b <- cumsum(rnorm(10))
stack(data.frame(a, b)) %>%
    rowid_to_column("x") %>%
    ggplot(aes(x, values)) +
    geom_line(aes(colour = ind))

enter image description here

0 голосов
/ 06 июня 2018

Вы можете указать аргумент x в функции lines.

set.seed(146)

a <- cumsum(rnorm(10))
b <- cumsum(rnorm(10))

plot(a, type = "l", xlim=c(0,20), ylim=c(-10,10), xlab="", ylab="", col=2)
lines(x = 10:19, y = b, col=3)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...