Hi,
I'm not an R expert, but I thought I'd give your question a shot anyway.
First, it looks like you're starting with a matrix, rather than a
list. Let's hope I guessed that right:
> m = matrix(c(324, 65, 543, 23, 54, 8765, 213, 43, 65))
> rownames(m) = c('X1Jan08', 'X1Jun08', 'X1Dec08',
'X2Jan08', 'X2Jun08', 'X2Dec08', 'X3Jan08',
'X3Jun08', 'X3Dec08')
> m
[,1]
X1Jan08 324
X1Jun08 65
X1Dec08 543
X2Jan08 23
X2Jun08 54
X2Dec08 8765
X3Jan08 213
X3Jun08 43
X3Dec08 65
You can pull the individual values out of the compound thing in
row names using regular expressions like so:
> gsub('([A-Z]\\d+)([A-Za-z]+)(\\d+)', '\\2 \\3',
rownames(m), perl=T)
With that, we can make a data.frame:
> df = data.frame(Value=m[,1],
Date=gsub('([A-Z]\\d+)([A-Za-z]+)(\\d+)', '\\2 \\3',
rownames(m), perl=T), Group=gsub('([A-Z]\\d+)([A-Za-z]+)(\\d+)',
'\\1', rownames(m), perl=T))
The old compound row names hold over from the matrix, but we can cure
that easily enough:
> rownames(df) = NULL
> df
Value Date Group
1 324 Jan 08 X1
2 65 Jun 08 X1
3 543 Dec 08 X1
4 23 Jan 08 X2
5 54 Jun 08 X2
6 8765 Dec 08 X2
7 213 Jan 08 X3
8 43 Jun 08 X3
9 65 Dec 08 X3
Both Date and Group will be coerced to factors, which is probably what
you want with Group and maybe not with Data.
If I'm wrong and you really have a list, it's not that different.
First, get a vector of values:
> data.list = list(X1Jan08=324, X1Jun08=65, X1Dec08=543, X2Jan08=23,
X2Jun08=54, X2Dec08=8765, X3Jan08=213, X3Jun08=43, X3Dec08=65)
> values = as.vector(data.list, mode="integer")
The rest is very similar to what's above. I hope this helps,
-chris
On Mon, Jul 27, 2009 at 3:10 PM, jimdare<jamesdare26 at gmail.com>
wrote:>
> Hi Guys,
>
> I was wondering how you would go about solving the following problem:
>
> I have a list where the grouping information is in the row names.
>
> Rowname [,1]
>
> X1Jan08 ?324
> X1Jun08 ?65
> X1Dec08 ?543
> X2Jan08 ?23
> X2Jun08 ?54
> X2Dec08 ?8765
> X3Jan08 ?213
> X3Jun08 ?43
> X3Dec08 ?65
>
> How can I create the following dataframe:
> ? ? ? Value ? ?Date ? ?Group
> [1,] ?324 ? ? ?Jan 08 ? ?X1
> [2,] ?65 ? ? ? Jun 08 ? ?X1
> [3,] ?543 ? ? Dec 08 ? ?X1
> ?etc.................
>
> Thanks for your help!
> James
>
> --
> View this message in context:
http://www.nabble.com/Split-rownames-into-factors-tp24689181p24689181.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.
>