【问题标题】:Create sequence of repeated values, in sequence?按顺序创建重复值序列?
【发布时间】:2011-09-19 21:32:30
【问题描述】:

我需要一个重复数字的序列,即1 1 ... 1 2 2 ... 2 3 3 ... 3 etc. 我实现这个的方式是:

  nyear <- 20
  names <- c(rep(1,nyear),rep(2,nyear),rep(3,nyear),rep(4,nyear),
             rep(5,nyear),rep(6,nyear),rep(7,nyear),rep(8,nyear))

这可行,但很笨拙,而且显然不能很好地扩展。

如何将N个整数依次重复M次?

  • 我尝试嵌套 seq()rep(),但这并没有达到我想要的效果。
  • 我显然可以编写一个 for 循环来执行此操作,但应该有一个内在的方法来执行此操作!

【问题讨论】:

    标签: r repeat seq replicate


    【解决方案1】:

    您错过了 rep()each= 参数:

    R> n <- 3
    R> rep(1:5, each=n)
     [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
    R> 
    

    所以你的例子可以用一个简单的来完成

    R> rep(1:8, each=20)
    

    【讨论】:

      【解决方案2】:

      另一个base R 选项可能是gl()

      gl(5, 3)
      

      输出是一个因素:

       [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
      Levels: 1 2 3 4 5
      

      如果需要整数,可以转换:

      as.numeric(gl(5, 3))
      
       [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
      

      【讨论】:

        【解决方案3】:

        对于你的例子,德克的回答是完美的。如果您有一个数据框并想将这种序列添加为列,您还可以使用 groupdata2 中的group(免责声明:我的包)将数据点贪婪地分成组。

        # Attach groupdata2
        library(groupdata2)
        # Create a random data frame
        df <- data.frame("x" = rnorm(27))
        # Create groups with 5 members each (except last group)
        group(df, n = 5, method = "greedy")
                 x .groups
             <dbl> <fct>  
         1  0.891  1      
         2 -1.13   1      
         3 -0.500  1      
         4 -1.12   1      
         5 -0.0187 1      
         6  0.420  2      
         7 -0.449  2      
         8  0.365  2      
         9  0.526  2      
        10  0.466  2      
        # … with 17 more rows
        

        创建这种分组因子的方法有很多种。例如。按组数、组大小列表,或者当某列中的值与前一行中的值不同时让组开始(例如,如果一列是c("x","x","y","z","z"),则分组因子将是c(1,1,2,3,3)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-19
          • 1970-01-01
          • 1970-01-01
          • 2013-04-22
          相关资源
          最近更新 更多