Wednesday, May 16, 2012

calculate age in years and months and melt data

I'm working with some time data and I'm having problems converting a time difference to years and months.



My data looks more or less like this,



dfn <- data.frame(
Today = Sys.time(),
DOB = seq(as.POSIXct('2007-03-27 00:00:01'), len= 26, by="3 day"),
Patient = factor(1:26, labels = LETTERS))


First I subtract the data of birth (DOB) form today's data (Today).



dfn$ageToday <-  dfn$Today - dfn$DOB


This gives me the Time difference in days.



dfn$ageToday
Time differences in days
[1] 1875.866 1872.866 1869.866 1866.866 1863.866
[6] 1860.866 1857.866 1854.866 1851.866 1848.866
[11] 1845.866 1842.866 1839.866 1836.866 1833.866
[16] 1830.866 1827.866 1824.866 1821.866 1818.866
[21] 1815.866 1812.866 1809.866 1806.866 1803.866
[26] 1800.866
attr(,"tzone")
[1] ""


This is where first part of my question comes in; how do I convert this difference to years and months (rounded to months)? (i.e. 4.7, 4.11, etc.)



I read the ?difftime man page and the ?format, but I did not figure it out.



Any help would be appreciated.



Furthermore, I would like to melt my final object and if I try using melt on the data frame above using this command,



require(plyr)
require(reshape)
mdfn <- melt(dfn, id=c('Patient'))


I get this strange warning I haven't see before



Error in as.POSIXct.default(value) : 
do not know how to convert 'value' to class "POSIXct"


So, my second question is; how do I create a time diffrence I can melt alongside my POSIXct variables? If I melt without dfn$ageToday everything works like a charm.



Thanks, Eric





No comments:

Post a Comment