[R] reshape data.frame
Dennis Murphy
djmuser at gmail.com
Sat Nov 19 06:32:43 CET 2011
This is very straightforward using the reshape2 package:
library('reshape2')
dc <- dcast(a, name ~ year, value_var = 'amount')
name 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
1 a 1 2 3 4 5 6 7 8 9 10 NA NA NA NA
2 b 11 12 13 14 15 16 17 18 19 20 21 22 23 24
1985
1 NA
2 25
dcast() returns a data frame; a companion function acast() returns a
matrix. If you want to change the names afterward, use
names(dc)[-1] <- paste('X', 1971:1985, sep = '.')
HTH,
Dennis
On Fri, Nov 18, 2011 at 4:04 PM, Trevor Davies <davies.trevor at gmail.com> wrote:
> A late friday afternoon coding question. I'm having a hard time thinking
> of the correct search terms for what I want to do.
>
> If I have a df like this:
>
> a <-
> data.frame(name=c(rep('a',10),rep('b',15)),year=c(1971:1980,1971:1985),amount=1:25)
> name year amount
> 1 a 1971 1
> 2 a 1972 2
> 3 a 1973 3
> 4 a 1974 4
> 5 a 1975 5
> 6 a 1976 6
> 7 a 1977 7
> 8 a 1978 8
> 9 a 1979 9
> 10 a 1980 10
> 11 b 1971 11
> 12 b 1972 12
> 13 b 1973 13
> 14 b 1974 14
> 15 b 1975 15
> 16 b 1976 16
> 17 b 1977 17
> 18 b 1978 18
> 19 b 1979 19
> 20 b 1980 20
> 21 b 1981 21
> 22 b 1982 22
> 23 b 1983 23
> 24 b 1984 24
> 25 b 1985 25
>
>
> and I'd like to reshape it so it is like this:
> X.1971 X.1972 X.1973 X.1974 X.1975 X.1976 X.1977 X.1978 X.1979 X.1980
> X.1981
> a 1 2 3 4 5 6 7 8 9 10
> NA
> b 11 12 13 14 15 16 17 18 19 20
> 21
> X.1982 X.1983 X.1984 X.1985
> a NA NA NA NA
> b 22 23 24 25
>
> Thanks for the assist.
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>
More information about the R-help
mailing list