I have a list that is generated from the resape package function 'cast'. It 
consists of three columns, Sku, DayOfYear, variable it is generated like:

r2007 <- cast(m2008, DayOfYear ~ variable | Sku, sum)

Now DayOfYear can range from 1:365 but there are not necessarily that many rows 
in the list. What I want to do is make every row in the list of lenght 365 and 
have the values correspond to the sum of the DayOfYear in the list if present 
and 0 if not. For example the first item in the list looks like:

$`100026`
   DayOfYear Quantity
1          3        1
2         30        1
3        149        1
4        156        1
5          3         1

Notice that there are not entires for each 'DayOfYear'. I would like to replace 
list list maintaining the same data structure with something like:

$`100026`
   DayOfYear Quantity
1          1        0
2          2        0
3          3        2
4          4        0

Where the Quantity column is the sum of the Quantity column in the previous 
list with the same 'Sku'. Notice there are no entries for 1,2 and 4 so those 
columns are zero and in the small example there are only two columns for 
DayOfYear 3, so the sum is 2. If it helps I have included hints to the data 
structure that I am working with below.

The parts that are particularly hard for me is how I would simultaneously 
remove and replace a list and conditionally sum only if a value exists.

Thank you.

Kevin

dput(r007[1])

structure(list("100026" = structure(list(DayOfYear = c(3L, 30L, 
149L, 156L, 165L, 171L, 187L, 198L, 212L, 215L, 216L, 218L, 221L, 
224L, 226L, 227L), Quantity = c(1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)), .Names = c("DayOfYear", "Quantity"
), row.names = c(NA, 16L), class = c("cast_df", "data.frame"), idvars = 
"DayOfYear", rdimnames = list(
    structure(list(DayOfYear = c(3L, 30L, 149L, 156L, 165L, 171L, 
    187L, 198L, 212L, 215L, 216L, 218L, 221L, 224L, 226L, 227L
    )), .Names = "DayOfYear", row.names = c("3", "30", "149", 
    "156", "165", "171", "187", "198", "212", "215", "216", "218", 
    "221", "224", "226", "227"), class = "data.frame"), structure(list(
        variable = structure(1L, .Label = "Quantity", class = "factor")), 
.Names = "variable", row.names = "Quantity", class = "data.frame")))), .Names = 
"100026")

> str(r2007[1])
List of 1
 $ 100009:List of 2
 $ DayOfYear: int [1:4] 66 128 137 193
 $ Quantity : int [1:4] 1 1 1 1
 - attr(*, "row.names")= int [1:4] 1 2 3 4
 - attr(*, "idvars")= chr "DayOfYear"
 - attr(*, "rdimnames")=List of 2
  ..$ :'data.frame':    4 obs. of  1 variable:
  .. ..$ DayOfYear: int [1:4] 66 128 137 193
  ..$ :'data.frame':    1 obs. of  1 variable:
  .. ..$ variable: Factor w/ 1 level "Quantity": 1

______________________________________________
R-help@r-project.org 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.

Reply via email to