按顺序创建重复值序列?
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)
。
【讨论】:
以上是关于按顺序创建重复值序列?的主要内容,如果未能解决你的问题,请参考以下文章