Hi Benjamin,
This looks like a bug, whereby melt fails when numeric id.vars have
attributes. Consider:
D <- structure(list(ID = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"),
AGE = structure(c(68L, 63L, 55L, 64L, 60L, 78L,
60L, 62L, 60L, 75L),
label = "Age", class = "labelled"),
BMI = structure(c(25L, 27L, 27L, 28L, 32L, NA,
36L, 27L, 31L, 25L),
label = "BMI (kg/m2)", class = "labelled"),
EventDays = structure(c(722L, 738L, 707L, 751L,
735L, 728L, 731L, 717L, 728L, 735L),
label = "Time to first
ACM/censor (days)", class = "labelled"),
ImplantDays = c(NA, NA, 575, NA, NA, NA, 490, 643, NA, NA)),
.Names = c("ID", "AGE", "BMI", "EventDays", "InterventionDays"),
row.names = c(NA, 10L),
class = "data.frame")
melt(D, c("ID", "AGE", "BMI")) ## does not work
D <- as.data.frame(lapply(D, as.vector)) ## strip attributes
melt(D, c("ID", "AGE", "BMI")) ## works
attr(D$ID, "label") <- "ID number" ## add attribute to factor
melt(D, c("ID", "AGE", "BMI")) ## works
attr(D$AGE, "label") <- "Age" ## add attribute to numeric variable
melt(D, c("ID", "AGE", "BMI")) ## does not work
I've reported the bug at https://github.com/hadley/reshape/issues/36
Best,
Ista
On Fri, Sep 6, 2013 at 11:59 AM, Nutter, Benjamin <[email protected]> wrote:
> I'm stumped. I have a dataset I want to melt to create a temporal sequence
> of events for each subject, but in each row, I would like to retain the
> baseline characteristics.
>
> D <- structure(list(ID = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"),
> AGE = structure(c(68L, 63L, 55L, 64L, 60L, 78L, 60L, 62L,
> 60L, 75L),
> label = "Age", class = "labelled"),
> BMI = structure(c(25L, 27L, 27L, 28L, 32L, NA, 36L, 27L,
> 31L, 25L),
> label = "BMI (kg/m2)", class =
> "labelled"),
> EventDays = structure(c(722L, 738L, 707L, 751L, 735L,
> 728L, 731L, 717L, 728L, 735L),
> label = "Time to first ACM/censor
> (days)", class = "labelled"),
> ImplantDays = c(NA, NA, 575, NA, NA, NA, 490, 643, NA,
> NA)),
> .Names = c("ID", "AGE", "BMI", "EventDays",
> "InterventionDays"),
> row.names = c(NA, 10L),
> class = "data.frame")
>
> melt(D, c("ID", "AGE", "BMI")) # produces the following error
>
> Error in data.frame(ids, variable, value, stringsAsFactors = FALSE) :
> arguments imply differing number of rows: 10, 20
>
>
> Now, I know AGE and BMI aren't exactly identifying variables, but my hope
> would be that, since ID uniquely identifies the subjects, I could use this as
> a short cut to getting the data set I want. I can get the data I want if I
> go about it a little differently.
>
> #* What I would like it to look like.
> Timeline <- melt(D[, c("ID", "EventDays", "InterventionDays")], "ID",
> na.rm=TRUE)
> Timeline <- arrange(Timeline, ID, value)
> Timeline <- merge(D[, c("ID", "AGE", "BMI")],
> Timeline,
> by="ID", all.x=TRUE)
>
>
> At first I thought it might be the mixture of character and numeric variables
> as IDs, but the following example works
>
> A <- data.frame(id = LETTERS[1:10],
> age = c(50, NA, 51, 52, 53, 54, 55, 56, 57, 58),
> meas1 = rnorm(10),
> meas2 = rnorm(10, 5),
> stringsAsFactors=FALSE)
> melt(A, c("id", "age"))
>
>
> I'm sure I'm missing something really obvious (kind of like how I can stare
> at the dry goods aisle for 10 minutes and still not find the chocolate
> chips). If anyone could help me understand why this error is occurring, I'd
> greatly appreciate it.
>
>> sessionInfo()
> R version 2.15.2 (2012-10-26)
> Platform: x86_64-unknown-linux-gnu (64-bit)
>
> locale:
> [1] C
>
> attached base packages:
> [1] splines stats graphics grDevices utils datasets methods base
>
> other attached packages:
> [1] lazyWeave_2.2.3 Hmisc_3.10-1 survival_2.36-14 plyr_1.7.1
> reshape2_1.2.2
>
> loaded via a namespace (and not attached):
> [1] cluster_1.14.3 grid_2.15.2 lattice_0.20-10 stringr_0.6.1
> tools_2.15.2
>
>
> Benjamin Nutter | Biostatistician | Quantitative Health Sciences
> Cleveland Clinic | 9500 Euclid Ave. | Cleveland, OH 44195 | (216)
> 445-1365
>
>
>
> ===================================
>
>
> Please consider the environment before printing this e-mail
>
> Cleveland Clinic is ranked as one of the top hospitals in America by U.S.News
> & World Report (2013).
> Visit us online at http://www.clevelandclinic.org for a complete listing of
> our services, staff and locations.
>
>
> Confidentiality Note: This message is intended for use ...{{dropped:18}}
>
> ______________________________________________
> [email protected] 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.
______________________________________________
[email protected] 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.