我想用R来创建数字序列1:8,11:18,21:28等等到1000(或者它可以得到的最接近的数字,即998)。显然,输入所有内容将是乏味的,但由于序列增加了7倍然后跳过3我不知道我可以使用什么功能来实现这一点。
我试过seq(1, 998, c(1,1,1,1,1,1,1,3))
,但它没有给我我想要的结果所以我一定做错了。
答案 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))}