2017-01-25 17 views
5

Sayı 1: 8, 11:18, 21:28 vb. Sıralarını oluşturmak için R'yi kullanmak istiyorum (veya en yakın değeri, yani 998). Açıkça, tüm yazım yorucu olurdu, ama sırayla bir kez 7 artar ve daha sonra 3 atlar çünkü ben bunu elde etmek için hangi işlevi kullanabileceğinden emin değilim.R'de alternatif artışlarla diziyi üret?

seq(1, 998, c(1,1,1,1,1,1,1,3))'u denedim ancak aradığım sonuçları vermiyor, bu yüzden yanlış bir şey yapmam gerekiyor.

cevap

6

Bu vektorızasyon mükemmel bir vaka R. içinde (çok geri dönüşüm) bir döngü ile

(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 
+8

@akrun - İlk çözüm bu bir doğrudan bir kopyası gibi görünen? (oy kullanmam, btw) – SymbolixAU

+0

@SymbolixAU sadece tüm mesajların neden bir downvote aldığını soran? –

+1

Hiçbir fikrim yok, kimseye oy vermedim – SymbolixAU

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

onlar hakkında okuyun: for(value in c(seq(1,991,10))){vector <- c(vector,seq(value,value+7))}

3

Sen 0 or 9 (mod 10) olan sayıları dışlamak istiyorum. Yani sen de bu deneyebilirsiniz:

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 

Ya Filter kullanarak tek çizgide

:

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