如何更改R向量的索引?

时间:2018-06-06 02:06:06

标签: r vector indexing

我想将不同随机向量的结果绘制成线条(看它们就像随机走动一样),这样它们中的每一个都跟在前一个之后的序列中。

为此,我希望第二个向量的索引从第一个向量的开始处开始。

例如在

的情况下
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 :(得分:2)

您可以在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

答案 1 :(得分:0)

我们可以使用b创建一个新的NA,直到length(a) -1,然后添加a的最后一个值,然后追加b,然后使用此{在new_b参数中{1}}。

lines

enter image description here

答案 2 :(得分:0)

使用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

答案 3 :(得分:0)

如果数据点索引对您很重要,我假设您正在使用时间序列类型数据。您应该考虑对象创建的时间序列索引和所需操作的子集。这是一个例子

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))