1

I am unable to figure out how can i write or condition inside which in R. This statemnet does not work.

   which(value>100 | value<=200)

I know it very basic thing but i am unable to find the right solution.

10 Rep
  • 2,217
  • 7
  • 19
  • 33
niharika Singhal
  • 61
  • 1
  • 1
  • 10
  • Welcome to SO. You could improve your question. Please read [how to provide minimal reproducible examples in R](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610). Then edit & improve it accordingly. A good post usually provides minimal input data, the desired output data & code tries incl. in what way they failed. – lukeA Aug 30 '16 at 10:33

2 Answers2

4

Every value is either larger than 100 or smaller-or-equal to 200. Maybe you need other numbers or & instead of |? Otherwise, there is no problem with that statement, the syntax is correct:

> value <- c(110, 2, 3, 4, 120)
> which(value>100 | value<=200)
[1] 1 2 3 4 5
> which(value>100 | value<=2)
[1] 1 2 5
> which(value>100 & value<=200)
[1] 1 5 
Bernhard
  • 4,272
  • 1
  • 13
  • 23
1
> which(iris$Species == "setosa" | iris$Species == "virginica")

 [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
 [19]  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36
 [37]  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54
 [55]  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72
 [73]  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
 [91]  91  92  93  94  95  96  97  98  99 100

does work. Remember to fully qualify the names of the variables you are selecting, as iris$Species in the example at hand (and not only Species).

Have a look at the documentation here.

Also notice that whatever you do with which can be generally done otherwise in a faster and better way.

gented
  • 1,620
  • 1
  • 16
  • 20
  • I have seen the documnetation, by this you men "Also notice that whatever you do with which can be generally done otherwise in a faster and better way." you know faster way of doing? – niharika Singhal Aug 30 '16 at 10:47
  • I wonder why you are advising to not use `which`. Usually faster ways are not important to me, but I like "better". Any hints to why to avoid it? – Bernhard Aug 30 '16 at 10:49
  • If you just want to get the truth values, then `which` is the only way. If you want to use it for subsetting (as most of the times) then packages like `data.table` or `dplyr` have a faster and more user friendly syntax. – gented Aug 30 '16 at 10:57
  • Thanks for the clarification. Indeed, `which` is not necessary for subsetting. Even without `data.table` or `dplyr`. I just did not make the assumption, it was generally used for that. – Bernhard Aug 30 '16 at 11:02
  • Can you share your solution with dplyr or data.table? – niharika Singhal Aug 30 '16 at 11:03
  • @niharika Singhal Can you comment, on whether any of the two answers you got so far solve your problem or otherwise, specify the problem more closely? – Bernhard Aug 30 '16 at 11:05
  • i too prefer the fatest solution, I have one more problem, if anyone of you can provide me some idea of making it fast, it would be very nice for me,thanks in advance. http://stackoverflow.com/questions/38971669/when-the-column-in-a-dataframe-changes-the-value-and-save-all-the-rows-between-t?noredirect=1#comment65298320_38971669 – niharika Singhal Aug 30 '16 at 11:11