按顺序创建重复值序列?

Posted

技术标签:

【中文标题】按顺序创建重复值序列?【英文标题】: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 循环来执行此操作,但应该有一个内在的方法来执行此操作!

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于按顺序创建重复值序列?的主要内容,如果未能解决你的问题,请参考以下文章

#194 sequence(搜索+动态规划+主席树)

重复的DNA序列

重复的DNA序列

创建无重复的随机数序列

shell函数及库的创建

shell函数