[R] How to combine conditional argument and logical argument in R to create subset of data...
arun
smartpink111 at yahoo.com
Wed Mar 6 17:06:17 CET 2013
Hi,
No problem.
V1<-rep(c(rep(111,5),rep(222,5),rep(333,5)),2)
length(V1)
#[1] 30
V2<- c(1:30) #should be the same length as V1
Tem1<- cbind(V1,V2)
Tem2<-Tem1[1:20,]
Tem1[!Tem1[,2]%in%Tem2[,2],]
# V1 V2
#[1,] 222 21
#[2,] 222 22
#[3,] 222 23
#[4,] 222 24
#[5,] 222 25
#[6,] 333 26
#[7,] 333 27
#[8,] 333 28
#[9,] 333 29
#[10,] 333 30
#or
subset(Tem1,!V2%in% Tem2[,2])
#or
Tem1[is.na(match(Tem1[,2],Tem2[,2])),]
# V1 V2
#[1,] 222 21
#[2,] 222 22
#[3,] 222 23
#[4,] 222 24
#[5,] 222 25
#[6,] 333 26
#[7,] 333 27
#[8,] 333 28
#[9,] 333 29
#[10,] 333 30
A.K.
________________________________
From: HJ YAN <yhj204 at googlemail.com>
To: arun <smartpink111 at yahoo.com>
Sent: Wednesday, March 6, 2013 10:33 AM
Subject: Re: [R] How to combine conditional argument and logical argument in R to create subset of data...
Thank you SO MUCH Arun!!!
That's brilliant-- I've learnt some very useful new R command now, e.g. 'do.call' and 'split'. And I see where my code went wrong now.
I do appreciate greatly for your prompt reply.
Also, I wonder if there exist a package can find difference between two data frames, e.g. one is a subset of the other? e.g.
V1<-rep(c(rep(111,5),rep(222,5),rep(333,5)),2)
V2<-c(1:23)
Tem1<-cbind(V1,V2)
Tem2<-Tem1[1:20,]
How do I get outcome like
[21,] 333 21
[22,] 333 22
[23,] 333 23
P.S. I used 'setdiff' before, but seems it only works for vectors but not for dataframe??
Sorry for so many questions today, as I'm coding for a work deadline tonight.
Many thanks!
Cheers
HJ
On Wed, Mar 6, 2013 at 1:55 PM, arun <smartpink111 at yahoo.com> wrote:
Hi,
>You can also try this:
> Tem3<- list()
> for(i in unique(Tem1[,1])) {
> Tem3[[i]]<- subset(Tem1,Tem1[,1]==i)
> Tem4<- do.call(rbind,Tem3)
> }
>head(Tem4)
># V1 V2
>#[1,] 111 1
>#[2,] 111 2
>#[3,] 111 3
>#[4,] 111 4
>#[5,] 111 13
>#[6,] 111 14
>
>
>#or
>Tem3<-c(NA,NA)
> for(i in unique(Tem1[,1])) {
> Tem2<- subset(Tem1, Tem1[,1]==i)
> Tem3<- rbind(Tem3,Tem2)
> Tem5<- Tem3[-1,]
> }
>head(Tem5)
># V1 V2
># 111 1
># 111 2
># 111 3
># 111 4
># 111 13
># 111 14
>
>A.K.
>
>
>________________________________
>From: HJ YAN <yhj204 at googlemail.com>
>
>To: arun <smartpink111 at yahoo.com>
>Cc: r-help at r-project.org
>Sent: Wednesday, March 6, 2013 8:24 AM
>Subject: Re: [R] How to combine conditional argument and logical argument in R to create subset of data...
>
>
>
>Hi Arun
>
>
>Thank you so much for the help, that's really helpful!!
>
>Also I have a quick question about the code below where I can not see why it doesn't work...
>
>I know the I shou
>
>V1<-c(rep(111,4),rep(222,4),rep(333,4),rep(111,4),rep(222,4),rep(333,3))
>V2<-c(1:23)
>Tem1<-cbind(V1,V2)
>
>
>So Tem 1 looks like...
>> Tem1
> V1 V2
> [1,] 111 1
> [2,] 111 2
> [3,] 111 3
> [4,] 111 4
> [5,] 222 5
> [6,] 222 6
> [7,] 222 7
> [8,] 222 8
> [9,] 333 9
>[10,] 333 10
>[11,] 333 11
>[12,] 333 12
>[13,] 111 13
>[14,] 111 14
>[15,] 111 15
>[16,] 111 16
>[17,] 222 17
>[18,] 222 18
>[19,] 222 19
>[20,] 222 20
>[21,] 333 21
>[22,] 333 22
>[23,] 333 23
>
>I would like the outcome to be...
>
> V1 V2
>
> 111 1
> 111 2
> 111 3
> 111 4
> 111 13
> 111 14
> 111 15
> 111 16
> 222 5
> 222 6
> 222 7
> 222 8
> 222 17
> 222 18
> 222 19
> 222 20
> 333 9
> 333 10
> 333 11
> 333 12
> 333 21
> 333 22
> 333 23
>
>
>So I tried code as below
>------------------------------------------
>Tem3<-c(NA,NA)
>for(i in length(unique(Tem1[,1]))){
>Tem2<-subset(Tem1,Tem1[,1]==unique(Tem1[,1])[i])
>Tem3<-rbind(Tem3,Tem2)
>Tem3
>}
>Tem4<-Tem3[-1,]
>---------------------------------------
>
>And only get this...
>
>
> V1 V2
> 333 9
> 333 10
> 333 11
> 333 12
> 333 21
> 333 22
> 333 23
>
>
>I tried to run the code step by step, e.g. letting i=1, then i=2, then i= 3, and updating my Tem3, I did get what I wanted, but wondered why in the loop above it did not work...??
>
>
>Many thanks in advance!
>
>HJ
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>On Wed, Mar 6, 2013 at 4:36 AM, arun <smartpink111 at yahoo.com> wrote:
>
>Hi,
>>
>> b[b[,4]>15 & (b[,1]>4|is.na(b[,1])) & (b[,2]>4|is.na(b[,2])),]
>> # [,1] [,2] [,3] [,4] [,5]
>>#[1,] 6 NA NA 16 20
>>#[2,] NA 5 NA 17 21
>>A.K.
>>
>>
>>
>>----- Original Message -----
>>From: HJ YAN <yhj204 at googlemail.com>
>>To: r-help at r-project.org
>>Cc:
>>Sent: Tuesday, March 5, 2013 9:33 PM
>>Subject: [R] How to combine conditional argument and logical argument in R to create subset of data...
>>
>>Dear R user
>>
>>I have data created using code below
>>
>>b<-matrix(2:21,nrow=4)
>>b[,1:3]=NA
>>b[4,2]=5
>>b[3,1]=6
>>
>>Now the data is
>>
>>> b
>> [,1] [,2] [,3] [,4] [,5]
>>[1,] NA NA NA 14 18
>>[2,] NA NA NA 15 19
>>[3,] 6 NA NA 16 20
>>[4,] NA 5 NA 17 21
>>
>>
>>I want to keep data in column 4 greater than 15 and the value in column 1 &
>>2 either greater than 4 or is 'NA'. So I would like to have
>>my outcome as below...
>>
>>[3,] 6 NA NA 16 20
>>[4,] NA 5 NA 17 21
>>
>>I thought something like the code below gonna to work but it only returns
>>the last row,e.g "NA 5 NA 17 21". ...
>>
>>bb<-b[which( (b[,2]>4 | b[,2]==NA) & (b[,1]>4 | b[,1]==NA) & b[,4]>15) ,])
>>
>>
>>Please could anyone help?
>>
>>Many thanks in advance
>>
>>HJ
>>
>> [[alternative HTML version deleted]]
>>
>>______________________________________________
>>R-help at 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.
>>
>>
>
More information about the R-help
mailing list