按顺序创建重复值的序列?

Create sequence of repeated values, in sequence?

提问人:Wesley Burr 提问时间:6/22/2011 最后编辑:smciWesley Burr 更新时间:5/29/2020 访问量:171611

问:

我需要一个重复数字序列,即 我实现它的方式是: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 重复 seq 复制

评论


答:

190赞 Dirk Eddelbuettel 6/22/2011 #1

你错过了以下论点:each=rep()

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赞 ludvigolsen 7/25/2019 #2

对于你的例子,德克的答案是完美的。如果你有一个数据框,并且想将这种序列添加为一列,你也可以使用 from 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)

5赞 tmfmnk 2/24/2020 #3

另一种选择可能是:base Rgl()

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