提问人:Wesley Burr 提问时间:6/22/2011 最后编辑:smciWesley Burr 更新时间:5/29/2020 访问量:171611
按顺序创建重复值的序列?
Create sequence of repeated values, in sequence?
问:
我需要一个重复数字序列,即 我实现它的方式是: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 循环来做到这一点,但应该有一种内在的方法来做到这一点!
答:
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 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
评论