I have habitat data with a column named habitat_size, this ranges from small, medium, large and missing, denoted as S,M,L,X, I want these values as columns so something like Small, Medium, Large, Missing, however, for its values it must take the values from the other habitats, and the column names for those habitats will be arranged into a separate column with each name matching its specific value.
I have tried:
dcast(habitat_case, month + season + year + LOC_ID + GBW_NUM + OBS_DT ~ GARDEN_SIZE)
Using LARGE_PONDS as value column: use value.var to override.
month season year LOC_ID GBW_NUM OBS_DT L M S X
1 8 Summer 2003 LOC569491 76550 2003-08-06 <NA> X <NA> <NA>
2 11 Autumn 2003 LOC575706 76863 2003-11-06 <NA> <NA> X <NA>
3 10 Autumn 2008 LOC575706 76863 2008-10-09 <NA> <NA> X <NA>
4 11 Autumn 2003 LOC575712 76869 2003-11-06 <NA> X <NA> <NA>
5 8 Summer 2008 LOC575712 76869 2008-08-08 <NA> <NA> X <NA>
6 11 Autumn 2003 LOC591752 76998 2003-11-06 <NA> X <NA> <NA>
However, it only uses one of the other columns as values, I expect something like this:
month season year LOC_ID GBW_NUM OBS_DT Habitat_type Large Medium Small Missing
8 Summer 2003 LOC569491 76550 2003-08-06 lawn A A A X
11 Autumn 2003 LOC575706 76863 2003-11-06 garden_age A A X A
10 Autumn 2008 LOC575706 76863 2008-10-09 small_pond 1 0 0 1
Here is a reproducible code:
structure(list(month = c(8, 11, 10, 11, 8, 11, 3, 4, 3, 1, 10,
12, 6, 6, 12, 10, 10, 11, 1, 1, 1, 1, 1, 1, 1), season = c("Summer",
"Autumn", "Autumn", "Autumn", "Summer", "Autumn", "Spring", "Spring",
"Spring", "Winter", "Autumn", "Winter", "Summer", "Summer", "Winter",
"Autumn", "Autumn", "Autumn", "Winter", "Winter", "Winter", "Winter",
"Winter", "Winter", "Winter"), year = c(2003, 2003, 2008, 2003,
2008, 2003, 2005, 2005, 2020, 2008, 2010, 2013, 2012, 2018, 2012,
2016, 2017, 2003, 1995, 1995, 1995, 2003, 1995, 1995, 1995),
LOC_ID = c("LOC569491", "LOC575706", "LOC575706", "LOC575712",
"LOC575712", "LOC591752", "LOC610239", "LOC614296", "LOC674315",
"LOC675786", "LOC794326", "LOC794326", "LOC973627", "LOC973627",
"LOC1354719486425", "LOC1314108", "LOC2174194", "LOC1300619774",
"LOC1300613011", "LOC1300612920", "LOC1300615617", "LOC1300609972",
"LOC1300611058", "LOC1300612277", "LOC1300605354"), GBW_NUM = c("76550",
"76863", "76863", "76869", "76869", "76998", "79154", "79846",
"85416", "85665", "89078", "89078", "90835", "90835", "97926",
"93406", "26517", "72370", "65158", "65056", "68017", "61805",
"63019", "64369", "54273"), OBS_DT = structure(c(12270, 12362,
14161, 12362, 14099, 12362, 12856, 12903, 18352, 13890, 14889,
16040, 15502, 17693, 15679, 17100, 17443, 12362, 9131, 9131,
9131, 12078, 9131, 9131, 9131), class = "Date"), GARDEN_SIZE = c("M",
"S", "S", "M", "S", "M", "L", "S", "M", "S", "M", "M", "L",
"L", "S", "M", "M", "M", "M", "S", "M", "L", "M", "L", "L"
), GARDEN_AGE = c("A", "B", "C", "D", "D", "D", "B", "C",
"D", "C", "D", "C", "E", "E", "B", "B", "D", "A", "E", "B",
"D", "D", "D", "E", "E"), SMALL_WATER_BODY = c("X", "X",
"X", "X", "X", "X", "X", "Q", "X", "X", "X", "X", "Q", "Q",
"X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X"), LARGE_WATER_BODY = c("X",
"X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X",
"X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X"
), STREAM = c("X", "X", "X", "X", "X", "X", "X", "S", "S",
"X", "X", "X", "S", "S", "X", "X", "X", "S", "X", "X", "X",
"X", "X", "X", "X"), RIVER = c("X", "X", "X", "X", "X", "X",
"X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X",
"X", "X", "X", "X", "X", "X", "X"), CANAL = c("X", "X", "X",
"X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X",
"X", "X", "X", "X", "X", "X", "X", "X", "X", "X"), SEASHORE = c("X",
"X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X",
"X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X"
), SMALL_PONDS = c("X", "X", "X", "X", "X", "X", "X", "X",
"0", "X", "X", "X", "X", "2", "X", "X", "X", "X", "X", "X",
"X", "X", "X", "X", "X"), MEDIUM_PONDS = c("X", "X", "X",
"X", "X", "X", "X", "X", "0", "X", "X", "X", "X", "X", "X",
"X", "X", "X", "X", "X", "X", "X", "X", "X", "X"), LARGE_PONDS = c("X",
"X", "X", "X", "X", "X", "X", "X", "0", "X", "X", "X", "X",
"X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X"
)), row.names = c(NA, 25L), class = "data.frame")