[R] Data frame manipulation

jim holtman jholtman at gmail.com
Fri Nov 23 04:02:25 CET 2012


The 'reshape2' package is your friend:

> require(reshape2)
> x <- melt(wrong, id = c("Local", "Mês", "Dia", "Colonia"), variable.name = "Hora")
> # remove "X" from Hora
> x$Hora <- as.character(substring(x$Hora, 2))
> head(x)  # not in the right order
      Local   Mês Dia Colonia Hora   value
1 Conceição Junho   1       3   6h 2.16137
2 Conceição Junho   2       3   6h 2.46538
3 Conceição Junho   3       3   6h 2.53275
4 Conceição Junho   1       4   6h 1.65321
5 Conceição Junho   2       4   6h 2.30320
6 Conceição Junho   3       4   6h 2.71012
> # sort, but first add blank on Hora for less that 10h for sorting
> x$Hora <- ifelse(nchar(x$Hora) == 2, paste0(" ", x$Hora), x$Hora)
> x <- x[order(x$Local, x$Mês, x$Dia, x$Colonia, x$Hora), ]
>
> head(x,20)
        Local   Mês Dia Colonia Hora   value
10  Conceição julho   1       3   6h 2.20952
20  Conceição julho   1       3   7h 2.01284
30  Conceição julho   1       3   8h 1.79239
40  Conceição julho   1       3   9h 1.59106
50  Conceição julho   1       3  10h 1.62325
60  Conceição julho   1       3  11h 1.51851
70  Conceição julho   1       3  12h 1.41497
80  Conceição julho   1       3  13h 1.38021
90  Conceição julho   1       3  14h 1.66276
100 Conceição julho   1       3  15h 1.46240
110 Conceição julho   1       3  16h 1.53148
120 Conceição julho   1       3  17h 1.66276
1   Conceição Junho   1       3   6h 2.16137
11  Conceição Junho   1       3   7h 2.20412
21  Conceição Junho   1       3   8h 2.08991
31  Conceição Junho   1       3   9h 1.72428
41  Conceição Junho   1       3  10h 1.69897
51  Conceição Junho   1       3  11h 1.62325
61  Conceição Junho   1       3  12h 1.44716
71  Conceição Junho   1       3  13h 1.51851



On Thu, Nov 22, 2012 at 8:53 PM, Raoni Rodrigues
<caciquesamurai at gmail.com> wrote:
> structure(list(Local = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
> 1L, 1L, 1L), .Label = "Conceição", class = "factor"), Mês = structure(c(2L,
> 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("julho", "Junho"
> ), class = "factor"), Dia = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
> 1L, 1L), Colonia = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L),
>     Hora = structure(1:10, .Label = c("6h", "7h", "8h", "9h",
>     "10h", "11h", "12h", "13h", "14h", "15h", "16h", "17h"), class =
> "factor"),
>     N = c(2.16137, 2.20412, 2.08991, 1.72428, 1.69897, 1.62325,
>     1.44716, 1.51851, 1.43136, 1.47712)), .Names = c("Local",
> "Mês", "Dia", "Colonia", "Hora", "N"), row.names = c(NA, 10L), class =
> "data.frame")



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.




More information about the R-help mailing list