49

我有一个关于创建向量的问题。如果我这样做a <- 1:10,“a”的值是 1,2,3,4,5,6,7,8,9,10。

我的问题是如何创建一个元素之间具有特定间隔的向量。例如,我想创建一个值从 1 到 100 但仅以 5 为间隔计数的向量,这样我就得到了一个值为 5,10,15,20,...,95,100 的向量

我认为在 Matlab 中我们可以做到1:5:100,我们如何使用 R 做到这一点?

我可以尝试做5*(1:20),但有更短的方法吗?(因为在这种情况下,我需要知道整个长度(100),然后除以间隔的大小(5)得到 20)

4

3 回答 3

98

在 R 中,等效函数是seq,您可以将其与选项一起使用by

seq(from = 5, to = 100, by = 5)
# [1]   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90  95 100

除了by您还可以有其他选项,例如length.outalong.with

length.out:如果要获取 0 到 1 之间的总共 10 个数字,例如:

seq(0, 1, length.out = 10)
# gives 10 equally spaced numbers from 0 to 1

together.with:它将您提供的向量的长度作为输入,并提供来自 1:length(input) 的向量。

seq(along.with=c(10,20,30))
# [1] 1 2 3

虽然,along.with建议seq_along在这种情况下使用,而不是使用该选项。从文档中?seq

seq是通用的,这里只描述默认的方法。请注意,无论参数名称如何,它都会在第一个参数的类上分派。如果只使用一个参数来调用它,这可能会产生意想不到的后果,意在将其作为一起使用。with:在这种情况下使用要好得多seq_along

seq_along:代替seq(along.with(.))

seq_along(c(10,20,30))
# [1] 1 2 3

希望这可以帮助。

于 2013-03-24T17:25:27.870 回答
5

使用代码

x = seq(0,100,5) #this means (starting number, ending number, interval)

输出将是

[1]   0   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75
[17]  80  85  90  95 100
于 2018-05-11T14:42:50.013 回答
1

通常,我们希望将向量划分为多个区间。在这种情况下,您可以使用函数,其中 (a) 是向量, (b) 是区间数。(假设你想要 4 个间隔)

a <- 1:10
b <- 4

FunctionIntervalM <- function(a,b) {
  seq(from=min(a), to = max(a), by = (max(a)-min(a))/b)
}

FunctionIntervalM(a,b)
# 1.00  3.25  5.50  7.75 10.00

因此,您有 4 个间隔:

1.00 - 3.25 
3.25 - 5.50
5.50 - 7.75
7.75 - 10.00

您还可以使用剪切功能

  cut(a, 4)

# (0.991,3.25] (0.991,3.25] (0.991,3.25] (3.25,5.5]   (3.25,5.5]   (5.5,7.75]  
# (5.5,7.75]   (7.75,10]    (7.75,10]    (7.75,10]   
#Levels: (0.991,3.25] (3.25,5.5] (5.5,7.75] (7.75,10]
于 2018-11-07T06:00:20.293 回答