【问题标题】:How do you create vectors with specific intervals in R?如何在 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 的最基本介绍的一部分。
  • 是的,我尝试了几件事,但找不到它..我没想到要写“序列”..一直在考虑间隔

标签: r vector intervals


【解决方案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.outalong.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 规则)
      猜你喜欢
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 2017-03-12
      • 1970-01-01
      • 2022-06-14
      • 2017-09-10
      相关资源
      最近更新 更多