Hi David,

Thank you for your help. The code you supplied is working, to an
extent. However, i'm only outputting the first monthly file into my
working directory.

Apologies as I'm a relatively new to R, so please bear with my
ignorance, have I not set up a loop correctly? Also, what is the
purpose of the function(x) argument within the lapply function?

Here's what I have now:

> input <- read.table("BHD_APO.txt", header=TRUE)
> head(input)
      Date     APO
1 1999.479 -168.48
2 1999.479 -158.08
3 1999.480 -163.79
4 1999.480 -164.38
5 1999.480 -173.94
6 1999.480 -161.92
>
> ##### This package and the "date_decimal" function reads my decimal date 
> correctly
> library(lubridate)
>
> input$date <- date_decimal(input$Date)
> input$mon <- cut(input$date, breaks="month")
> head(input)
      Date     APO                date        mon
1 1999.479 -168.48 1999-06-25 00:01:51 1999-06-01
2 1999.479 -158.08 1999-06-25 00:16:50 1999-06-01
3 1999.480 -163.79 1999-06-25 00:31:52 1999-06-01
4 1999.480 -164.38 1999-06-25 01:01:56 1999-06-01
5 1999.480 -173.94 1999-06-25 01:16:58 1999-06-01
6 1999.480 -161.92 1999-06-25 01:31:57 1999-06-01
> lapply(split(input, input$mon), function(x)
+ write.table(x, file=as.character(input$mon[1])))
$`1999-06-01`
NULL

$`1999-07-01`
NULL


The $ "date" NULL then repeats for all months.

Many thanks
Thomas

On Tue, Jun 17, 2014 at 9:35 PM, David Winsemius <dwinsem...@comcast.net> wrote:
>
> On Jun 17, 2014, at 5:00 AM, Thomas Barningham wrote:
>
>> Dear R users,
>>
>> I have a .txt file of time series data from the middle of 1999 through
>> to the end of 2012. There are two columns in the file, the first is a
>> decimal date, the second is an atmospheric tracer value and looks like
>> this:
>>
>> Date  APO
>> 1999.47945560  -168.48
>> 1999.47948410  -158.08
>> 1999.47951270  -163.79
>> 1999.47956990  -164.38
>> 1999.47959850  -173.94
>> 1999.47962700  -161.92
>> 1999.47965560  -154.36
>> 1999.47968420  -147.55
>> 1999.47971280  -157.06
>> 1999.47974140  -151.21
>> 1999.47976990  -141.63
>> 1999.47979850  -147.97
>>
>> What I'd now like to do is write new .txt (or .csv) files based on the
>> month of the year so that I have separate text files for Jan, Feb, Mar
>> etc for each year 1999, 2000, 2001 etc. using either the write.table
>> or write.csv function. Is there an easy way to do this in R?
>
> There is a breaks argument to cut.POSIXt function that will accept "month" as 
> an argument.
>  With a suitable offset that 'Date' column looks like it would be suitable 
> for `as.Date.numeric`.
>
> Try something along these lines:
>
> dat$dt <- as.Date(dat$Date)
> dat$mon <- cut(dat$dt, breaks="month")
> lapply( split(dat, dat$mon), function(dts)
>              write.csv( dts, file=as.character(dts$mon[1]) ))
>
>>
>> Google key word searches have not been fruitful and the only other way
>> I can see to do this is "manually" in excel, which would take a long
>> time. I'm hoping there's a neat bit of code to do this.
>
> The above seemed acceptably "neat" to me, although it remains only modestly 
> tested.
>
> --
>
> David Winsemius
> Alameda, CA, USA
>



-- 
Thomas Barningham
Centre for Ocean and Atmospheric Sciences
School of Environmental Sciences
University of East Anglia
Norwich Research Park
Norwich
NR4 7TJ

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

Reply via email to