[R] creating series of vectors
Petr Savicky
savicky at cs.cas.cz
Thu Feb 16 21:41:36 CET 2012
On Thu, Feb 16, 2012 at 05:32:15PM +0100, Nino Pierantonio wrote:
> Dear All,
>
> I am pretty new to R and thus my question may sound silly.
>
> Is there a way to automatically generate a series of separate vectors
> (so not arranged in a matrix), without typing and changing every time
> the values, and store them as separate *xlsx file, where the "*" is
> replaced by the name of the vector itself?
>
> What i would like to create is a total of 12 vectors, corresponding to
> the 12 months (January to December), say for the year 2006; thus the
> name of a resulting single vector should be something like
> "January2006", and the final file that will be stored in my WD should
> have the same name ("January2009.xlsx").
>
> The number of the elements of each vector must correspond to the length
> in days of the single months (considering a non-leap-year, 356 days)
> multiplied by 2 (e.g. "January2006" will have 31*2=62 elements,
> "February2006" will have 28*2=56 elements, and so on).
>
> Finally, the elements of the vectors should be named as:
> "010106_aaa","010106_bbb","020106_aaa","020106_bbb", ... ,
> "310106_aaa","310106_bbb".
>
> To sum up, at the end of the process i would like to obtain 12 vectors
> as it follows:
>
> Jauary2006("010106_aaa","010106_bbb","020106_aaa","020106_bbb", ... ,
> "310106_aaa","310106_bbb")
> .
> .
> .
> .
> .
> December2006("010106_aaa","010106_bbb","020106_aaa","020106_bbb", ... ,
> "310106_aaa","310106_bbb")
Hi.
Try the following function, which creates a list of vectors.
seqDays <- function(year)
{
n <- 365 + (year %% 4 == 0)
x <- as.Date(paste(year, "-01-01", sep="")) + 0:(n-1)
months <- unique(months(x))
x <- do.call(rbind, strsplit(as.character(x), "-"))
x1 <- sprintf("%02d", year %% 100)
y <- paste(x[, 3], x[, 2], x1, sep="")
y <- c(rbind(paste(y, "_aaa", sep=""), paste(y, "_bbb", sep="")))
x2 <- rep(x[, 2], each=2)
out <- split(y, x2)
names(out) <- paste(months, year, sep="")
out
}
out <- seqDays(2006)
out
$January2006
[1] "010106_aaa" "010106_bbb" "020106_aaa" "020106_bbb" "030106_aaa"
[6] "030106_bbb" "040106_aaa" "040106_bbb" "050106_aaa" "050106_bbb"
[11] "060106_aaa" "060106_bbb" "070106_aaa" "070106_bbb" "080106_aaa"
[16] "080106_bbb" "090106_aaa" "090106_bbb" "100106_aaa" "100106_bbb"
[21] "110106_aaa" "110106_bbb" "120106_aaa" "120106_bbb" "130106_aaa"
[26] "130106_bbb" "140106_aaa" "140106_bbb" "150106_aaa" "150106_bbb"
[31] "160106_aaa" "160106_bbb" "170106_aaa" "170106_bbb" "180106_aaa"
[36] "180106_bbb" "190106_aaa" "190106_bbb" "200106_aaa" "200106_bbb"
[41] "210106_aaa" "210106_bbb" "220106_aaa" "220106_bbb" "230106_aaa"
[46] "230106_bbb" "240106_aaa" "240106_bbb" "250106_aaa" "250106_bbb"
[51] "260106_aaa" "260106_bbb" "270106_aaa" "270106_bbb" "280106_aaa"
[56] "280106_bbb" "290106_aaa" "290106_bbb" "300106_aaa" "300106_bbb"
[61] "310106_aaa" "310106_bbb"
$February2006
[1] "010206_aaa" "010206_bbb" "020206_aaa" "020206_bbb" "030206_aaa"
[6] "030206_bbb" "040206_aaa" "040206_bbb" "050206_aaa" "050206_bbb"
[11] "060206_aaa" "060206_bbb" "070206_aaa" "070206_bbb" "080206_aaa"
[16] "080206_bbb" "090206_aaa" "090206_bbb" "100206_aaa" "100206_bbb"
[21] "110206_aaa" "110206_bbb" "120206_aaa" "120206_bbb" "130206_aaa"
[26] "130206_bbb" "140206_aaa" "140206_bbb" "150206_aaa" "150206_bbb"
[31] "160206_aaa" "160206_bbb" "170206_aaa" "170206_bbb" "180206_aaa"
[36] "180206_bbb" "190206_aaa" "190206_bbb" "200206_aaa" "200206_bbb"
[41] "210206_aaa" "210206_bbb" "220206_aaa" "220206_bbb" "230206_aaa"
[46] "230206_bbb" "240206_aaa" "240206_bbb" "250206_aaa" "250206_bbb"
[51] "260206_aaa" "260206_bbb" "270206_aaa" "270206_bbb" "280206_aaa"
[56] "280206_bbb"
$March2006
[1] "010306_aaa" "010306_bbb" "020306_aaa" "020306_bbb" "030306_aaa"
...
Individual vectors may be accessed as out[[i]], their names
as names(out).
Storing to text files may be done as follows.
for (i in 1:12) {
writeLines(out[[i]], con=paste(names(out)[i], ".txt", sep=""))
}
Hope this helps.
Petr Savicky.
More information about the R-help
mailing list