2016-03-25 12 views
-1

私はR関数が新しく、常にパッケージを使用してループを避けることをお勧めします。しかし、今私は特定の質問のためのループを作成しようとしています。範囲に基づいてデータセットをサブセット化したいと思います。私は以下のコードは自明であると思う。サブセット()を使用してデータの範囲を選択する

dt = as.data.frame(sample(1:100)) 
names(dt) = "num" 

subs.it <- function(x) { 
    subs <- subset(dt, num >= (x - 5) & num <= (x + 5)) 
    return(subs) 
} 
subs.it(c(15, 50)) 

間違っ出力:

num 
44 55 
47 20 
65 19 
77 17 
83 12 
91 16 
92 51 
100 54 

正しい:

num 
4 15 
18 11 
47 20 
50 13 
54 10 
65 19 
66 14 
77 17 
82 18 
83 12 
91 16 
17 48 
19 53 
29 45 
33 52 
39 46 
44 55 
45 50 
49 49 
89 47 
92 51 
100 54 

私は私が間違っているのものを見つけることができません。それはあなたが探している機能のように思える

おかげ

+0

あなたは本質的にRの観点からは無意味なすべての 'x> = c(10,45)&x <= c(20,55)'を要求しています。おそらく、あなたは '(x> = ...&x <= ...)| 'のような" or "で2つの条件を結合させることを意味します。 (x> = ...&x <= ...) '? – joran

+0

あなたは何をすることをお勧めしますか? – klo

+0

を使用して、範囲に基づいてデータセットをサブセット化します。私は複数の番号を持っています。たとえば、数値が15の場合は10から20の部分集合、数値が50の場合は45から55の部分集合です。最終的なデータセットの範囲は10から20,45から55です。 – klo

答えて

0

subsetそのものです。試してみてください:

subset(dt, num > 15 & num <50)

編集:

ああ、私はあなたが二つの異なる範囲をしたい参照してください。

x = 15 y = 50 subset(dt, (num >= x-5 & num <= x+5) | (num >= y-5 & num <= y+5))

以上のコンパクト版絶対値を使用して:あなたが行くここ

subset(dt, (abs(num - x) <= 5 | abs(num - y) <= 5))

+0

ありがとうございますが、それは仕事をします。私は上記の条件に基づいて数字の範囲が必要です。だから私は10から20と45から55までの数字を取得する必要があります。 – klo

+0

ああ私は...私の答えを更新しました。 –

0

あなたはこれを行うことができます。

set.seed(12345) 

library(dplyr) 

subs.it <- function(x, y, z) { 
     subs <- x %>% filter(
     (num >= (y-5) & num <= (y+5)) | (num >= (z-5) & num <= (z+5)) 
        ) 
     return(subs) 
    } 


subs.it(dt, 15, 55) 

    num 
1 16 
2 14 
3 15 
4 55 
5 52 
6 17 
7 56 
8 13 
9 57 
10 54 
11 18 
12 53 
13 11 
14 58 
15 19 
16 10 
17 51 
18 60 
19 20 
20 50 
21 12 
22 59 
+0

ありがとうございます。上記の例では、私は2つの数字(15,50)しか示しませんでしたが、私の実際のデータにはさらに多くの約30の数字があります。基本的には、ある範囲の値からデータセットをサブセット化する必要があります。私は特定の値(すなわち15,20)を持ち、値+/- 5の行を部分集合にしたいものに基づいています。 – klo

+0

したがって、yとzだけでなく、関数に変数を追加します。aa、ab、ac .. apそれに応じて変数を追加してください。 – InfiniteFlashChess

+0

私はあなたが尋ねているときに可変範囲フィルターを追加するforループを作成する方法があるかどうかは分かりません。 – InfiniteFlashChess

関連する問題