Skip to content
Back to formatted view

Raw Message

Message-ID: <AA818EAD2576BC488B4F623941DA74275556DD39@inbomail.inbo.be>
Date: 2011-11-16T13:34:14Z
From: ONKELINX, Thierry
Subject: hierachical code system
In-Reply-To: <1321450066.30805.YahooMailNeo@web110707.mail.gq1.yahoo.com>

Dear Albert-Jan,

The easiest way is to create extra variables with the corresponding aggregation level. substr() en strsplit() can be your friends. Once you have those variables you can use aggregate() or any other aggregating function. You don't need loops.

Best regards,

Thierry

> -----Oorspronkelijk bericht-----
> Van: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> Namens Albert-Jan Roskam
> Verzonden: woensdag 16 november 2011 14:28
> Aan: R Mailing List
> Onderwerp: [R] hierachical code system
> 
> Hi,
> 
> I have a hierachical code system such as the example below (the printed data
> are easiest to read). I would like to write a function that returns an 'imputed'
> data frame, ie. where the the parent values are calculated as the sum of the
> child values. So, for instance, STAT.01.01.06??is the sum of STAT.01.01.06.01
> through STAT.01.01.06.06. The code I have written uses two for loops, and,
> moreover, does not work as intended. My starting point was to determine the
> code depth by counting the dots in the variable 'code' (using strsplit), then
> iterate over the tree from deep to shallow.?Does anybody have a good idea as
> to how to approach this in R?
> 
> theCodes <- c('STAT.01', 'STAT.01.01', 'STAT.01.01.01', 'STAT.01.01.02',
> 'STAT.01.01.03', 'STAT.01.01.04', 'STAT.01.01.05', 'STAT.01.01.06',
> 'STAT.01.01.06.01', 'STAT.01.01.06.02', 'STAT.01.01.06.03', 'STAT.01.01.06.04',
> 'STAT.01.01.06.05', 'STAT.01.01.06.06', 'STAT.01.02', 'STAT.01.02.01',
> 'STAT.01.02.02', 'STAT.01.02.03', 'STAT.01.02.03.01', 'STAT.01.02.03.02',
> 'STAT.01.02.03.03', 'STAT.01.02.03.04', 'STAT.01.02.03.05', 'STAT.01.03')
> theValues <- c('NA', 'NA', '15074.23366', '4882.942034', '1619.59628',
> '1801.722877', '1019.973666', 'NA', '503.9239317', '917.2189347',
> '6018.830465', '1944.11311', '1427.575402', '1965.725428', 'NA', '5857.293612',
> '5933.770263', '6077.089518', 'NA', '1427.180073', '455.9387993', '859.766603',
> '1002.983331', '2225.328211') df <- as.data.frame(cbind(code=theCodes,
> value=theValues))
> print(df)
> ?????????????? code?????? value
> 1?????????? STAT.01????????? NA
> 2??????? STAT.01.01????????? NA
> 3???? STAT.01.01.01 15074.23366
> 4???? STAT.01.01.02 4882.942034
> 5???? STAT.01.01.03? 1619.59628
> 6???? STAT.01.01.04 1801.722877
> 7???? STAT.01.01.05 1019.973666
> 8???? STAT.01.01.06????????? NA
> 9? STAT.01.01.06.01 503.9239317
> 10 STAT.01.01.06.02 917.2189347
> 11 STAT.01.01.06.03 6018.830465
> 12 STAT.01.01.06.04? 1944.11311
> 13 STAT.01.01.06.05 1427.575402
> 14 STAT.01.01.06.06 1965.725428
> 15?????? STAT.01.02????????? NA
> 16??? STAT.01.02.01 5857.293612
> 17??? STAT.01.02.02 5933.770263
> 18??? STAT.01.02.03 6077.089518
> 19 STAT.01.02.03.01????????? NA
> 20 STAT.01.02.03.02 1427.180073
> 21 STAT.01.02.03.03 455.9387993
> 22 STAT.01.02.03.04? 859.766603
> 23 STAT.01.02.03.05 1002.983331
> 24?????? STAT.01.03 2225.328211
> >
> 
> Thank you in advance!
> 
> Cheers!!
> Albert-Jan
> 
> 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ~~~~~
> All right, but apart from the sanitation, the medicine, education, wine, public
> order, irrigation, roads, a fresh water system, and public health, what have the
> Romans ever done for us?
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ~~~~~
> 	[[alternative HTML version deleted]]