[R] Subset command and the : operator

2011-05-27 Thread Chris Beeley
Hello-

I have some code that looks like this:

with(mydatalocal, sum(table(Service[Time==5:8])))

This is designed to add up the numbers of responses between the Time
codes 5 to 8 (which are integers and refer to quarters). Service is
just one of the variables, I'm just trying to count the number of
responses so I picked any of the variables. However, there is
something wrong, it returns far too low a number for the number of
responses. Indeed, if I run this:

with(mydatalocal, sum(table(Service[Time==5|Time==6|Time==7|Time==8])))

I get 4 times as many responses.

I've tried to recreate the problem with the following code:

mydata=data.frame(matrix(c(rep(1, 10), rep(2, 10), rep(3, 10), seq(1,
10, 1), seq(11, 20, 1), seq(21, 30, 1)), ncol=2))

with(mydata, sum(table(X1[X2==9:12])))

with(mydata, sum(table(X1[X2==9|X2==10|X2==11|X2==12])))

but to my immense frustration it actually seems to work fine there,
the same number, 4, both times. However, it does generate the
following error message:

In X2 == 9:12 :
  longer object length is not a multiple of shorter object length

I know I can use X1[ Time  9  Time  3] but I would like to know
what is wrong with the 5:8 usage in case I put it somewhere else and
don't notice the problem.

Many thanks!

Chris Beeley
Institute of Mental Health

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Subset command and the : operator

2011-05-27 Thread jim holtman
What you are probably looking for is the %in% operator:

with(mydata, sum(table(X1[X2 %in% 5:8])))


Read up on how operations are vectorized and how variables are
recycled if not long enough

 x - 1:10
 x == 1:2  # compares first two fine
 [1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 x == 1:3  # same for the first 3
 [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 x == 4:6  # this is 4 5 6 4 5 6 which just happens to compare with 4 5 6 in x
 [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
 x == 2:5  # notice that this fail
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 x %in% c(8,2,7,3)  # order not important
 [1] FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE


On Fri, May 27, 2011 at 7:10 AM, Chris Beeley chris.bee...@gmail.com wrote:
 Hello-

 I have some code that looks like this:

 with(mydatalocal, sum(table(Service[Time==5:8])))

 This is designed to add up the numbers of responses between the Time
 codes 5 to 8 (which are integers and refer to quarters). Service is
 just one of the variables, I'm just trying to count the number of
 responses so I picked any of the variables. However, there is
 something wrong, it returns far too low a number for the number of
 responses. Indeed, if I run this:

 with(mydatalocal, sum(table(Service[Time==5|Time==6|Time==7|Time==8])))

 I get 4 times as many responses.

 I've tried to recreate the problem with the following code:

 mydata=data.frame(matrix(c(rep(1, 10), rep(2, 10), rep(3, 10), seq(1,
 10, 1), seq(11, 20, 1), seq(21, 30, 1)), ncol=2))

 with(mydata, sum(table(X1[X2==9:12])))

 with(mydata, sum(table(X1[X2==9|X2==10|X2==11|X2==12])))

 but to my immense frustration it actually seems to work fine there,
 the same number, 4, both times. However, it does generate the
 following error message:

 In X2 == 9:12 :
  longer object length is not a multiple of shorter object length

 I know I can use X1[ Time  9  Time  3] but I would like to know
 what is wrong with the 5:8 usage in case I put it somewhere else and
 don't notice the problem.

 Many thanks!

 Chris Beeley
 Institute of Mental Health

 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.




-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.