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]]

