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


81

我需要一个重复的数字序列,即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循环来执行此操作,但是应该有一个固有的方法来执行此操作!

Answers:


161

您错过了以下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)

1

对于您的示例,德克的答案是完美的。如果您有一个数据框,并且想要将这种序列添加为列,则还可以使用groupgroupdata2(免责声明:我的包)中的方法将数据点贪婪地分为几组。

# 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)


1

另一种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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.