如何在 R 中创建具有特定间隔的向量?
Posted
技术标签:
【中文标题】如何在 R 中创建具有特定间隔的向量?【英文标题】:How do you create vectors with specific intervals in R? 【发布时间】:2013-03-14 03:43:34 【问题描述】:我有一个关于创建向量的问题。如果我做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)
【问题讨论】:
我知道有时很难找到好的搜索词,但如果我用谷歌搜索“r 序列”,第二次点击是seq
的帮助页面。该函数可能也是 R 的最基本介绍的一部分。
是的,我尝试了几件事,但找不到它..我没想到要写“序列”..一直在考虑间隔
【参考方案1】:
在 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.out
和along.with
。
length.out:如果你想得到一共10个0到1之间的数字,例如:
seq(0, 1, length.out = 10)
# gives 10 equally spaced numbers from 0 to 1
along.with:它将您提供的向量的长度作为输入,并提供来自 1:length(input) 的向量。
seq(along.with=c(10,20,30))
# [1] 1 2 3
尽管在这种情况下,建议使用seq_along
,而不是使用along.with
选项。来自?seq
的文档
seq
是通用的,这里只介绍默认的方法。请注意,无论参数名称如何,它都会在 first 参数的类上调度。如果只使用一个参数来调用它,这可能会产生意想不到的后果。在这种情况下,最好使用seq_along
。
seq_along:而不是seq(along.with(.))
seq_along(c(10,20,30))
# [1] 1 2 3
希望这会有所帮助。
【讨论】:
【参考方案2】:使用代码
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
【讨论】:
【参考方案3】:通常,我们希望将向量划分为多个区间。 在这种情况下,您可以使用一个函数,其中 (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]
【讨论】:
我建议使用length.out = b + 1
而不是更复杂的by = (max(a) - min(a)) / b
。
确实如此。该函数有助于计算找到区间数(例如 Sturge 规则)以上是关于如何在 R 中创建具有特定间隔的向量?的主要内容,如果未能解决你的问题,请参考以下文章