who can give me some hint?

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

who can give me some hint?

Tammy Ma


 
 Hi All,
 
 
> act_2
         Date    Dtime Hour Min Second               Rep
51 2006-02-22 14:52:18   14  52     18  useractivity_act
52 2006-02-22 14:52:18   14  52     18                 4
55 2006-02-22 14:52:49   14  52     49                 4
57 2006-02-22 14:52:51   14  52     51                 4
58 2006-02-22 14:52:52   14  52     52                 3
60 2006-02-22 14:54:42   14  54     42 useractivity_idle
 
I want to change act_2 to
         Date    Dtime Hour Min Second               Rep
 
51 2006-02-22 14:52:18   14  52     18  useractivity_act
 
52 2006-02-22 14:52:18   14  52     18                 4
58 2006-02-22 14:52:52   14  52     52                 3
60 2006-02-22 14:54:42   14  54     42 useractivity_idle
 
in other word, I want to keep 1st if there are many repeated value, I made the program as:
 
 
rm_r<-function(act_2){
 dm<-dim(act_2)[1]-1
 for(i in 2:dm){
   
 if(act_2$Rep[i+1]==act_2$Rep[i]){
   act_2<-act_2[-(i+1),]
   }else{
   act_2<-act_2
   }
 }
return(act_2)
}
 
when it moved one row on 1st loop, i should still start 2 but it become 3 at 2nd loop, if I add i<-i-1, then i go to 1
seems not reasonbale. How should I modify it`?
 
Tammy
_________________________________________________________________
Drag n’ drop—Get easy photo sharing with Windows Live™ Photos.

http://www.microsoft.com/windows/windowslive/products/photos.aspx
        [[alternative HTML version deleted]]


______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: who can give me some hint?

Simon Pickett-4

 Hi All,


> act_2
         Date    Dtime Hour Min Second               Rep
51 2006-02-22 14:52:18   14  52     18  useractivity_act
52 2006-02-22 14:52:18   14  52     18                 4
55 2006-02-22 14:52:49   14  52     49                 4
57 2006-02-22 14:52:51   14  52     51                 4
58 2006-02-22 14:52:52   14  52     52                 3
60 2006-02-22 14:54:42   14  54     42 useractivity_idle

I want to change act_2 to
         Date    Dtime Hour Min Second               Rep

51 2006-02-22 14:52:18   14  52     18  useractivity_act

52 2006-02-22 14:52:18   14  52     18                 4
58 2006-02-22 14:52:52   14  52     52                 3
60 2006-02-22 14:54:42   14  54     42 useractivity_idle

in other word, I want to keep 1st if there are many repeated value, I made
the program as:

Not sure what you mean here, can you describe this more fully?

It seems that you might be able to avoid using loops if all you want to do
is select only the rows where column x is less than a threshold value.
e.g.
a<-a[a$columnx<1000,]

Hope this helps

Simon.


rm_r<-function(act_2){
 dm<-dim(act_2)[1]-1
 for(i in 2:dm){

 if(act_2$Rep[i+1]==act_2$Rep[i]){
   act_2<-act_2[-(i+1),]
   }else{
   act_2<-act_2
   }
 }
return(act_2)
}

when it moved one row on 1st loop, i should still start 2 but it become 3 at
2nd loop, if I add i<-i-1, then i go to 1
seems not reasonbale. How should I modify it`?

Tammy
_________________________________________________________________
Drag n' drop-Get easy photo sharing with Windows LiveT Photos.

http://www.microsoft.com/windows/windowslive/products/photos.aspx
[[alternative HTML version deleted]]




--------------------------------------------------------------------------------


> ______________________________________________
> [hidden email] 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.
>

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: who can give me some hint?

Richard Cotton
In reply to this post by Tammy Ma
>  Hi All,
>
>
> > act_2
>          Date    Dtime Hour Min Second               Rep
> 51 2006-02-22 14:52:18   14  52     18  useractivity_act
> 52 2006-02-22 14:52:18   14  52     18                 4
> 55 2006-02-22 14:52:49   14  52     49                 4
> 57 2006-02-22 14:52:51   14  52     51                 4
> 58 2006-02-22 14:52:52   14  52     52                 3
> 60 2006-02-22 14:54:42   14  54     42 useractivity_idle
>
> I want to change act_2 to
>          Date    Dtime Hour Min Second               Rep
>
> 51 2006-02-22 14:52:18   14  52     18  useractivity_act
>
> 52 2006-02-22 14:52:18   14  52     18                 4
> 58 2006-02-22 14:52:52   14  52     52                 3
> 60 2006-02-22 14:54:42   14  54     42 useractivity_idle
>
> in other word, I want to keep 1st if there are many repeated value,
> I made the program as:
>
>
> rm_r<-function(act_2){
>  dm<-dim(act_2)[1]-1
>  for(i in 2:dm){
>
>  if(act_2$Rep[i+1]==act_2$Rep[i]){
>    act_2<-act_2[-(i+1),]
>    }else{
>    act_2<-act_2
>    }
>  }
> return(act_2)
> }
>
> when it moved one row on 1st loop, i should still start 2 but it
> become 3 at 2nd loop, if I add i<-i-1, then i go to 1
> seems not reasonbale. How should I modify it`?

Please don't repeatedly post the same question - it is irritating, and
you're not likely to get a favourable response.  Try explaining your
problem more clearly.  What is the condition that you want to use to keep
rows?  (In your example, each of the rows is different, yet you kept some
and discarded others.)

If you just want to discard some rows form a data frame, you don't need a
loop, e.g.

dfr <- data.frame(x=1:10, y=runif(10))
dfr[c(1,3,5,5),]

Regards,
Richie.

Mathematical Sciences Unit
HSL



------------------------------------------------------------------------
ATTENTION:

This message contains privileged and confidential inform...{{dropped:20}}

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: who can give me some hint?

Gabor Grothendieck
In reply to this post by Tammy Ma
I assume the problem is to only keep those rows whose
Rep value is not equal to the Rep value in the prior row.
In that case just compare c("", Rep[-nr]) to Rep and
use the resulting vector, ix, to select out rows.
Rep <- as.character(act_2$Rep) could
be simplified to Rep <- act_2$Rep if Rep
is already known to be "character".


Lines <- "Date    Dtime Hour Min Second               Rep
51 2006-02-22 14:52:18   14  52     18  useractivity_act
52 2006-02-22 14:52:18   14  52     18                 4
55 2006-02-22 14:52:49   14  52     49                 4
57 2006-02-22 14:52:51   14  52     51                 4
58 2006-02-22 14:52:52   14  52     52                 3
60 2006-02-22 14:54:42   14  54     42 useractivity_idle"

act_2 <- read.table(textConnection(Lines), header = TRUE, as.is = TRUE)

nr <- nrow(act_2)
Rep <- as.character(act_2$Rep)
ix <- Rep != c("", Rep[-nr])
act_2[ix]

On Thu, Mar 12, 2009 at 6:25 AM, Tammy Ma <[hidden email]> wrote:

>
>
>
>  Hi All,
>
>
>> act_2
>         Date    Dtime Hour Min Second               Rep
> 51 2006-02-22 14:52:18   14  52     18  useractivity_act
> 52 2006-02-22 14:52:18   14  52     18                 4
> 55 2006-02-22 14:52:49   14  52     49                 4
> 57 2006-02-22 14:52:51   14  52     51                 4
> 58 2006-02-22 14:52:52   14  52     52                 3
> 60 2006-02-22 14:54:42   14  54     42 useractivity_idle
>
> I want to change act_2 to
>         Date    Dtime Hour Min Second               Rep
>
> 51 2006-02-22 14:52:18   14  52     18  useractivity_act
>
> 52 2006-02-22 14:52:18   14  52     18                 4
> 58 2006-02-22 14:52:52   14  52     52                 3
> 60 2006-02-22 14:54:42   14  54     42 useractivity_idle
>
> in other word, I want to keep 1st if there are many repeated value, I made the program as:
>
>
> rm_r<-function(act_2){
>  dm<-dim(act_2)[1]-1
>  for(i in 2:dm){
>
>  if(act_2$Rep[i+1]==act_2$Rep[i]){
>   act_2<-act_2[-(i+1),]
>   }else{
>   act_2<-act_2
>   }
>  }
> return(act_2)
> }
>
> when it moved one row on 1st loop, i should still start 2 but it become 3 at 2nd loop, if I add i<-i-1, then i go to 1
> seems not reasonbale. How should I modify it`?
>
> Tammy
> _________________________________________________________________
> Drag n’ drop—Get easy photo sharing with Windows Live™ Photos.
>
> http://www.microsoft.com/windows/windowslive/products/photos.aspx
>        [[alternative HTML version deleted]]
>
>
> ______________________________________________
> [hidden email] 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.
>
>

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: who can give me some hint?

Tammy Ma


Thanks a lot for your reply.

I expect a more flexible solution. Because I couldn't check that column one by one.

If another Rep colum is:
 useractivity_act
2
2
3
3
3
4
5
5
6
useractivity_idle
i should be able to write a program to make it as:
useractivity_act
2
3
4
5
6
useractivity_idle

Only keep 1st value of repeated values.
I have been working no it for a while....Still didnt get solution.
Thanks for your concentration.

Tammy

> Date: Thu, 12 Mar 2009 08:03:11 -0400
> Subject: Re: [R] who can give me some hint?
> From: [hidden email]
> To: [hidden email]
> CC: [hidden email]
>
> I assume the problem is to only keep those rows whose
> Rep value is not equal to the Rep value in the prior row.
> In that case just compare c("", Rep[-nr]) to Rep and
> use the resulting vector, ix, to select out rows.
> Rep <- as.character(act_2$Rep) could
> be simplified to Rep <- act_2$Rep if Rep
> is already known to be "character".
>
>
> Lines <- "Date    Dtime Hour Min Second               Rep
> 51 2006-02-22 14:52:18   14  52     18  useractivity_act
> 52 2006-02-22 14:52:18   14  52     18                 4
> 55 2006-02-22 14:52:49   14  52     49                 4
> 57 2006-02-22 14:52:51   14  52     51                 4
> 58 2006-02-22 14:52:52   14  52     52                 3
> 60 2006-02-22 14:54:42   14  54     42 useractivity_idle"
>
> act_2 <- read.table(textConnection(Lines), header = TRUE, as.is = TRUE)
>
> nr <- nrow(act_2)
> Rep <- as.character(act_2$Rep)
> ix <- Rep != c("", Rep[-nr])
> act_2[ix]
>
> On Thu, Mar 12, 2009 at 6:25 AM, Tammy Ma <[hidden email]> wrote:
> >
> >
> >
> >  Hi All,
> >
> >
> >> act_2
> >         Date    Dtime Hour Min Second               Rep
> > 51 2006-02-22 14:52:18   14  52     18  useractivity_act
> > 52 2006-02-22 14:52:18   14  52     18                 4
> > 55 2006-02-22 14:52:49   14  52     49                 4
> > 57 2006-02-22 14:52:51   14  52     51                 4
> > 58 2006-02-22 14:52:52   14  52     52                 3
> > 60 2006-02-22 14:54:42   14  54     42 useractivity_idle
> >
> > I want to change act_2 to
> >         Date    Dtime Hour Min Second               Rep
> >
> > 51 2006-02-22 14:52:18   14  52     18  useractivity_act
> >
> > 52 2006-02-22 14:52:18   14  52     18                 4
> > 58 2006-02-22 14:52:52   14  52     52                 3
> > 60 2006-02-22 14:54:42   14  54     42 useractivity_idle
> >
> > in other word, I want to keep 1st if there are many repeated value, I made the program as:
> >
> >
> > rm_r<-function(act_2){
> >  dm<-dim(act_2)[1]-1
> >  for(i in 2:dm){
> >
> >  if(act_2$Rep[i+1]==act_2$Rep[i]){
> >   act_2<-act_2[-(i+1),]
> >   }else{
> >   act_2<-act_2
> >   }
> >  }
> > return(act_2)
> > }
> >
> > when it moved one row on 1st loop, i should still start 2 but it become 3 at 2nd loop, if I add i<-i-1, then i go to 1
> > seems not reasonbale. How should I modify it`?
> >
> > Tammy
> > _________________________________________________________________
> > Drag n’ drop—Get easy photo sharing with Windows Live™ Photos.
> >
> > http://www.microsoft.com/windows/windowslive/products/photos.aspx
> >        [[alternative HTML version deleted]]
> >
> >
> > ______________________________________________
> > [hidden email] 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.
> >
> >
_________________________________________________________________
News, entertainment and everything you care about at Live.com. Get it now!
http://www.live.com/getstarted.aspx
        [[alternative HTML version deleted]]


______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: who can give me some hint?

Gabor Grothendieck
Its not clear what "more flexible refers to".  The posted solution
already produces the sample output you showed.  What else
should it do?

On Thu, Mar 12, 2009 at 8:15 AM, Tammy Ma <[hidden email]> wrote:

>
> Thanks a lot for your reply.
>
> I expect a more flexible solution. Because I couldn't check that column one
> by one.
>
> If another Rep colum is:
> useractivity_act
> 2
> 2
> 3
> 3
> 3
> 4
> 5
> 5
> 6
> useractivity_idle
> i should be able to write a program to make it as:
> useractivity_act
> 2
> 3
> 4
> 5
> 6
> useractivity_idle
>
> Only keep 1st value of repeated values.
> I have been working no it for a while....Still didnt get solution.
> Thanks for your concentration.
>
> Tammy
>
>> Date: Thu, 12 Mar 2009 08:03:11 -0400
>> Subject: Re: [R] who can give me some hint?
>> From: [hidden email]
>> To: [hidden email]
>> CC: [hidden email]
>>
>> I assume the problem is to only keep those rows whose
>> Rep value is not equal to the Rep value in the prior row.
>> In that case just compare c("", Rep[-nr]) to Rep and
>> use the resulting vector, ix, to select out rows.
>> Rep <- as.character(act_2$Rep) could
>> be simplified to Rep <- act_2$Rep if Rep
>> is already known to be "character".
>>
>>
>> Lines <- "Date Dtime Hour Min Second Rep
>> 51 2006-02-22 14:52:18 14 52 18 useractivity_act
>> 52 2006-02-22 14:52:18 14 52 18 4
>> 55 2006-02-22 14:52:49 14 52 49 4
>> 57 2006-02-22 14:52:51 14 52 51 4
>> 58 2006-02-22 14:52:52 14 52 52 3
>> 60 2006-02-22 14:54:42 14 54 42 useractivity_idle"
>>
>> act_2 <- read.table(textConnection(Lines), header = TRUE, as.is = TRUE)
>>
>> nr <- nrow(act_2)
>> Rep <- as.character(act_2$Rep)
>> ix <- Rep != c("", Rep[-nr])
>> act_2[ix]
>>
>> On Thu, Mar 12, 2009 at 6:25 AM, Tammy Ma <[hidden email]> wrote:
>> >
>> >
>> >
>> >  Hi All,
>> >
>> >
>> >> act_2
>> >         Date    Dtime Hour Min Second               Rep
>> > 51 2006-02-22 14:52:18   14  52     18  useractivity_act
>> > 52 2006-02-22 14:52:18   14  52     18                 4
>> > 55 2006-02-22 14:52:49   14  52     49                 4
>> > 57 2006-02-22 14:52:51   14  52     51                 4
>> > 58 2006-02-22 14:52:52   14  52     52                 3
>> > 60 2006-02-22 14:54:42   14  54     42 useractivity_idle
>> >
>> > I want to change act_2 to
>> >         Date    Dtime Hour Min Second               Rep
>> >
>> > 51 2006-02-22 14:52:18   14  52     18  useractivity_act
>> >
>> > 52 2006-02-22 14:52:18   14  52     18                 4
>> > 58 2006-02-22 14:52:52   14  52     52                 3
>> > 60 2006-02-22 14:54:42   14  54     42 useractivity_idle
>> >
>> > in other word, I want to keep 1st if there are many repeated value, I
>> > made the program as:
>> >
>> >
>> > rm_r<-function(act_2){
>> >  dm<-dim(act_2)[1]-1
>> >  for(i in 2:dm){
>> >
>> >  if(act_2$Rep[i+1]==act_2$Rep[i]){
>> >   act_2<-act_2[-(i+1),]
>> >   }else{
>> >   act_2<-act_2
>> >   }
>> >  }
>> > return(act_2)
>> > }
>> >
>> > when it moved one row on 1st loop, i should still start 2 but it become
>> > 3 at 2nd loop, if I add i<-i-1, then i go to 1
>> > seems not reasonbale. How should I modify it`?
>> >
>> > Tammy
>> > _________________________________________________________________
>> > Drag n’ drop—Get easy photo sharing with Windows Live™ Photos.
>> >
>> > http://www.microsoft.com/windows/windowslive/products/photos.aspx
>> >        [[alternative HTML version deleted]]
>> >
>> >
>> > ______________________________________________
>> > [hidden email] 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.
>> >
>> >
>
> ________________________________
> Get news, entertainment and everything you care about at Live.com. Check it
> out!

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: who can give me some hint?

William Dunlap
In reply to this post by Tammy Ma
I think I answered a very similar question from you yesterday
but perhaps the mail went astray.  The subject line is not
informative.

It may make it easier to think about if you use a function like
   isFirstInRun <- function(x) c(TRUE, x[-1]!=x[-length(x)]
Given a vector x (without NA's in it) it tells you if a given
element of x is the first in a run of identical values.  E.g.,
   x <- c(1,2,2,1,1,3)
   isFirstInRun(x)
   [1] TRUE TRUE FALSE TRUE FALSE TRUE
You don't have to understand why this works or why it works
quickly or have this idiom in your working set yet.  You do need to
know how to use logical values as subscripts to extract elements of
interest from vectors or rows of interest from data frames.  E.g.,
   act_2[ with(act_2, isFirstInRun(Rep)), ]
should returns row 51, 52, 58, and 60 of your example.  If you
want to only return the first of each Hour/Min combinary you could
use either
   isFirstInRun(interaction(Hour,Min))
or
   isFirstInRun(Hour)|isFirstInRun(Min)
as the row subscript to act_2 to pull out rows 51 and 60.

If this were to become a standard function it could be modified
to handle NA's, 0-long arguments, and multiple arguments.  (If
it accepted multiple arguments then rle() ought to be modified
in the same way, as they are closely related.)

Bill Dunlap
TIBCO Software Inc - Spotfire Division
wdunlap tibco.com

----------------------------------------------------------------------
Tammy Ma metal_licaling at live.com
Thu Mar 12 11:25:56 CET 2009

> act_2
         Date    Dtime Hour Min Second               Rep
51 2006-02-22 14:52:18   14  52     18  useractivity_act
52 2006-02-22 14:52:18   14  52     18                 4
55 2006-02-22 14:52:49   14  52     49                 4
57 2006-02-22 14:52:51   14  52     51                 4
58 2006-02-22 14:52:52   14  52     52                 3
60 2006-02-22 14:54:42   14  54     42 useractivity_idle

I want to change act_2 to
         Date    Dtime Hour Min Second               Rep

51 2006-02-22 14:52:18   14  52     18  useractivity_act

52 2006-02-22 14:52:18   14  52     18                 4
58 2006-02-22 14:52:52   14  52     52                 3
60 2006-02-22 14:54:42   14  54     42 useractivity_idle

in other word, I want to keep 1st if there are many repeated value, I
made the program as:


rm_r<-function(act_2){
 dm<-dim(act_2)[1]-1
 for(i in 2:dm){
   
 if(act_2$Rep[i+1]==act_2$Rep[i]){
   act_2<-act_2[-(i+1),]
   }else{
   act_2<-act_2
   }
 }
return(act_2)
}

when it moved one row on 1st loop, i should still start 2 but it become
3 at 2nd loop, if I add i<-i-1, then i go to 1
seems not reasonbale. How should I modify it`?

Tammy

______________________________________________
[hidden email] 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.