Re: [R] Newbie woes with *apply

2010-02-14 Thread Dimitri Shvorob

Bug fix:

first.day.of.quarter = function(date)
{
  t = first.day.of.month(date)
  l = month(date) %% 3
  if (l == 0) return(t)
  t = seq.Date(t, by = -1 month, length = l)
  return(t[length(t)])
}

But the *apply part still does not work.

-- 
View this message in context: 
http://n4.nabble.com/Newbie-woes-with-apply-tp1555149p1555167.html
Sent from the R help mailing list archive at Nabble.com.

__
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] Newbie woes with *apply

2010-02-14 Thread Gabor Grothendieck
Try

library(zoo)
x - as.Date(seq(1, 500, 50)) # test data
as.Date(as.yearmon(x))
as.Date(as.yearqtr(x))


On Sun, Feb 14, 2010 at 8:59 AM, Dimitri Shvorob
dimitri.shvo...@gmail.com wrote:

 Dataframe cust has Date-type column open.date. I wish to set up another
 column, with (first day of) the quarter of open.date.

 To be comprehensive (of course, improvement suggestions are welcome),

 month = function(date)
 {
  return(as.numeric(format(date,%m)))
 }

 first.day.of.month = function(date)
 {
  return(date + 1 - as.numeric(format(date,%d)))
 }

 first.day.of.quarter = function(date)
 {
  t = seq.Date(first.day.of.month(date), by = -1 month, length =
 month(date) %% 3)
  return(t[length(t)])
 }

 Now the main part,

 cust$open.quarter  = apply(cust$open.date, 1, FUN = first.day.of.quarter)
 Error in apply(cust$open.date, 1, FUN = first.day.of.quarter) :
  dim(X) must have a positive length

 cust$open.quarter  = tapply(cust$open.date, FUN = first.day.of.quarter)
 Error in tapply(cust$open.date, FUN = first.day.of.quarter) :
  element 1 is empty;
   the part of the args list of 'is.list' being evaluated was:
   (INDEX)

 cust$open.quarter  = lapply(cust$open.date, FUN = first.day.of.quarter)
 Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L,  :
  invalid 'trim' argument

 Can anyone suggest the right syntax?

 Thank you.

 --
 View this message in context: 
 http://n4.nabble.com/Newbie-woes-with-apply-tp1555149p1555149.html
 Sent from the R help mailing list archive at Nabble.com.

 __
 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.


__
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] Newbie woes with *apply

2010-02-14 Thread Dimitri Shvorob

Many thanks, but my focus is actually on *apply usage.
-- 
View this message in context: 
http://n4.nabble.com/Newbie-woes-with-apply-tp1555149p1555329.html
Sent from the R help mailing list archive at Nabble.com.

__
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] Newbie woes with *apply

2010-02-14 Thread Gabor Grothendieck
Your function is not receiving what you may think its receiving.  Try this:

 x - Sys.Date() + 1:3
 junk - lapply(x, print)
[1] 14655
[1] 14656
[1] 14657

So add this as the first statement in the body of each of your functions:
date - as.Date(date, 1970-01-01)

and then using x from above try these:
lapply(x, first.day.of.quarter)
xx - x; xx[] - sapply(x, first.day.of.quarter)






On Sun, Feb 14, 2010 at 8:59 AM, Dimitri Shvorob
dimitri.shvo...@gmail.com wrote:

 Dataframe cust has Date-type column open.date. I wish to set up another
 column, with (first day of) the quarter of open.date.

 To be comprehensive (of course, improvement suggestions are welcome),

 month = function(date)
 {
  return(as.numeric(format(date,%m)))
 }

 first.day.of.month = function(date)
 {
  return(date + 1 - as.numeric(format(date,%d)))
 }

 first.day.of.quarter = function(date)
 {
  t = seq.Date(first.day.of.month(date), by = -1 month, length =
 month(date) %% 3)
  return(t[length(t)])
 }

 Now the main part,

 cust$open.quarter  = apply(cust$open.date, 1, FUN = first.day.of.quarter)
 Error in apply(cust$open.date, 1, FUN = first.day.of.quarter) :
  dim(X) must have a positive length

 cust$open.quarter  = tapply(cust$open.date, FUN = first.day.of.quarter)
 Error in tapply(cust$open.date, FUN = first.day.of.quarter) :
  element 1 is empty;
   the part of the args list of 'is.list' being evaluated was:
   (INDEX)

 cust$open.quarter  = lapply(cust$open.date, FUN = first.day.of.quarter)
 Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L,  :
  invalid 'trim' argument

 Can anyone suggest the right syntax?

 Thank you.

 --
 View this message in context: 
 http://n4.nabble.com/Newbie-woes-with-apply-tp1555149p1555149.html
 Sent from the R help mailing list archive at Nabble.com.

 __
 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.


__
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.