在R中生成具有交替增量的序列?

时间:2017-01-25 04:27:30

标签: r list sequence

我想用R来创建数字序列1:8,11:18,21:28等等到1000(或者它可以得到的最接近的数字,即998)。显然,输入所有内容将是乏味的,但由于序列增加了7倍然后跳过3我不知道我可以使用什么功能来实现这一点。

我试过seq(1, 998, c(1,1,1,1,1,1,1,3)),但它没有给我我想要的结果所以我一定做错了。

4 个答案:

答案 0 :(得分:7)

这是R中矢量化(回收利用)的完美案例。阅读它们

(1:100)[rep(c(TRUE,FALSE), c(8,2))]
# [1]  1  2  3  4  5  6  7  8 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27 28 31 32
#[27] 33 34 35 36 37 38 41 42 43 44 45 46 47 48 51 52 53 54 55 56 57 58 61 62 63 64
#[53] 65 66 67 68 71 72 73 74 75 76 77 78 81 82 83 84 85 86 87 88 91 92 93 94 95 96
#[79] 97 98

答案 1 :(得分:5)

rep(seq(0,990,by=10), each=8) + seq(1,8)

答案 2 :(得分:3)

您想要排除0 or 9 (mod 10)的数字。所以你也可以试试这个:

n <- 1000 # upper bound
x <- 1:n
x <- x[! (x %% 10) %in% c(0,9)] # filter out (0, 9) mod (10)

head(x,80)
# [1]  1  2  3  4  5  6  7  8 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27  
# 28 31 32 33 34 35 36 37 38 41 42 43 44 45 46 47 48 51 52 53 54 55 56 57
# 58 61 62 63 64 65 66 67 68 71 72 73 74 75 76 77 78 81 82 83 84 85 
# 86 87 88 91 92 93 94 95 96 97 98

或使用Filter一行:

Filter(function(x) !((x %% 10) %in% c(0,9)), 1:100)
# [1]  1  2  3  4  5  6  7  8 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27 28 31 32 33 34 35 36 37 38 41 42 43 44 45 46 47 48 51 52 53 54 55 56 57
# [48] 58 61 62 63 64 65 66 67 68 71 72 73 74 75 76 77 78 81 82 83 84 85 86 87 88 91 92 93 94 95 96 97 98

答案 3 :(得分:-1)

使用周期:for(value in c(seq(1,991,10))){vector <- c(vector,seq(value,value+7))}