[R] subset in dataframes
Sarah Goslee
sarah.goslee at gmail.com
Sun Oct 2 14:00:59 CEST 2011
Hi,
On Sun, Oct 2, 2011 at 7:48 AM, Cecilia Carmo <cecilia.carmo at ua.pt> wrote:
> I need help in subseting a dataframe:
>
>
>
> data1<-data.frame(year=c(2001,2002,2003,2004,2001,2002,2003,2004,
>
> 2001,2002,2003,2004,2001,2002,2003,2004),
>
> firm=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4),x=c(11,22,-32,25,-26,47,85,98,
>
> 101,14,87,56,12,43,67,54),
>
> y=c(110,220,302,250,260,470,850,980,1010,140,870,560,120,430,670,540))
Thank you for providing a reproducible example.
>
>
> data1
>
>
>
> I want to keep the firms where all x>0 (where there are no negative values
> in x)
>
> So my output should be:
>
> year firm x y
>
> 1 2001 3 101 1010
>
> 2 2002 3 14 140
>
> 3 2003 3 87 870
>
> 4 2004 3 56 560
>
> 5 2001 4 12 120
>
> 6 2002 4 43 430
>
> 7 2003 4 67 670
>
> 8 2004 4 54 540
>
>
>
> So I'm doing:
>
> data2<-data1[data1$firm%in%subset(data1,data1$x>0),]
>
> data2
>
What about finding which ones have negative values and should be deleted,
> unique(data1$firm[data1$x <= 0])
[1] 1 2
And then deleting them?
> data1[!(data1$firm %in% unique(data1$firm[data1$x <= 0])),]
year firm x y
9 2001 3 101 1010
10 2002 3 14 140
11 2003 3 87 870
12 2004 3 56 560
13 2001 4 12 120
14 2002 4 43 430
15 2003 4 67 670
16 2004 4 54 540
>
> But the result is
>
> [1] year firm x y
>
> <0 rows> (or 0-length row.names)
>
If you look at just the result of part of your code,
subset(data1,data1$x>0)
it isn't giving at all what you need for the next step: the entire
data frame for x>0.
Sarah
--
Sarah Goslee
http://www.functionaldiversity.org
More information about the R-help
mailing list