Transform a data frame from long format to wide by increasing the number of columns and decreasing the number of rows.
wider_dt(.data, ..., name, value = NULL, fun = NULL, fill = NA)
A data.frame
Optional. The unchanged group in the transformation.
Could use integer vector, could receive what select_dt
receives.
Chracter.One column name of class to spread
Chracter.One column name of value to spread.
If NULL
, use all other variables.
Should the data be aggregated before casting?
Defaults to NULL
, which uses length
for aggregation.
If a function is provided, with aggregated by this function.
Value with which to fill missing cells. Default uses NA
.
data.table
The parameter of `name` and `value` should always be provided and should be explicit called (with the parameter names attached).
stocks = data.frame(
time = as.Date('2009-01-01') + 0:9,
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2),
Z = rnorm(10, 0, 4)
) %>%
longer_dt(time) -> longer_stocks
longer_stocks
#> time name value
#> <Date> <fctr> <num>
#> 1: 2009-01-01 X 0.335008866
#> 2: 2009-01-02 X 0.169063399
#> 3: 2009-01-03 X 1.387121164
#> 4: 2009-01-04 X 1.378852616
#> 5: 2009-01-05 X 0.393258277
#> 6: 2009-01-06 X 0.096138697
#> 7: 2009-01-07 X 1.313206156
#> 8: 2009-01-08 X 0.013035822
#> 9: 2009-01-09 X -1.281642993
#> 10: 2009-01-10 X -0.004285721
#> 11: 2009-01-01 Y 2.054135393
#> 12: 2009-01-02 Y -0.166088761
#> 13: 2009-01-03 Y 0.841223197
#> 14: 2009-01-04 Y -1.681912731
#> 15: 2009-01-05 Y 0.276743427
#> 16: 2009-01-06 Y -1.477213273
#> 17: 2009-01-07 Y 5.715596062
#> 18: 2009-01-08 Y 0.258267190
#> 19: 2009-01-09 Y 1.349114073
#> 20: 2009-01-10 Y 0.062882772
#> 21: 2009-01-01 Z 2.921755755
#> 22: 2009-01-02 Z -4.169214230
#> 23: 2009-01-03 Z 5.534706702
#> 24: 2009-01-04 Z 6.052646574
#> 25: 2009-01-05 Z 5.095414544
#> 26: 2009-01-06 Z 4.402146914
#> 27: 2009-01-07 Z -5.316178929
#> 28: 2009-01-08 Z -2.130851174
#> 29: 2009-01-09 Z -3.674280881
#> 30: 2009-01-10 Z 0.775161779
#> time name value
longer_stocks %>%
wider_dt("time",
name = "name",
value = "value")
#> Key: <time>
#> time X Y Z
#> <Date> <num> <num> <num>
#> 1: 2009-01-01 0.335008866 2.05413539 2.9217558
#> 2: 2009-01-02 0.169063399 -0.16608876 -4.1692142
#> 3: 2009-01-03 1.387121164 0.84122320 5.5347067
#> 4: 2009-01-04 1.378852616 -1.68191273 6.0526466
#> 5: 2009-01-05 0.393258277 0.27674343 5.0954145
#> 6: 2009-01-06 0.096138697 -1.47721327 4.4021469
#> 7: 2009-01-07 1.313206156 5.71559606 -5.3161789
#> 8: 2009-01-08 0.013035822 0.25826719 -2.1308512
#> 9: 2009-01-09 -1.281642993 1.34911407 -3.6742809
#> 10: 2009-01-10 -0.004285721 0.06288277 0.7751618
longer_stocks %>%
mutate_dt(one = 1) %>%
wider_dt("time",
name = "name",
value = "one")
#> Key: <time>
#> time X Y Z
#> <Date> <num> <num> <num>
#> 1: 2009-01-01 1 1 1
#> 2: 2009-01-02 1 1 1
#> 3: 2009-01-03 1 1 1
#> 4: 2009-01-04 1 1 1
#> 5: 2009-01-05 1 1 1
#> 6: 2009-01-06 1 1 1
#> 7: 2009-01-07 1 1 1
#> 8: 2009-01-08 1 1 1
#> 9: 2009-01-09 1 1 1
#> 10: 2009-01-10 1 1 1
## using "fun" parameter for aggregation
DT <- data.table(v1 = rep(1:2, each = 6),
v2 = rep(rep(1:3, 2), each = 2),
v3 = rep(1:2, 6),
v4 = rnorm(6))
## for each combination of (v1, v2), add up all values of v4
DT %>%
wider_dt(v1,v2,
value = "v4",
name = ".",
fun = sum)
#> Key: <v1, v2>
#> v1 v2 .
#> <int> <int> <num>
#> 1: 1 1 0.1575282
#> 2: 1 2 0.6787566
#> 3: 1 3 -0.5871757
#> 4: 2 1 0.1575282
#> 5: 2 2 0.6787566
#> 6: 2 3 -0.5871757