take_x_by_y.RdFunction to duplicate values in column x by
the unique cases in column y. Useful, for
example, in extracting and duplicating a subject's
baseline values across all time points in a long-form
data frame for a longitudinal study.
take_x_by_y(lfd, x, y, extra = NULL, default = NA, per_row = TRUE)A long-form data frame.
The column with values to duplicate (non-standard evaluation possible).
The column to repeat values over (non-standard evaluation possible).
A logical vector matching in
length to the number of rows of lfd
specifying additional cases to match by
when isolating the values of x to
repeat.
The value to substitute if
no cases for x based on extra
are found to duplicate.
Logical; if FALSE returns
the associated value of x for each
unique value of y, otherwise returns
a value of x per each frow of lfd.
A vector matching in length to the number
of rows of lfd (for per_row = TRUE) or
to the number of unique values of y with the
values of x repeated for each unique case of
y.
# Example long-form data frame
lfd <- data.frame(
ID = rep( 1:3, each = 3 ),
Value = 1:9,
Time = rep( 0:2, 3 )
)
# Repeat first value of Y for each value of X
i <- lfd$Time == 0
take_x_by_y( lfd, Value, ID, extra = i )
#> [1] 1 1 1 4 4 4 7 7 7
# Repeat last value of Y for each value of X
i <- lfd$Time == 2
take_x_by_y( lfd, Value, ID, extra = i )
#> [1] 3 3 3 6 6 6 9 9 9
# Per unique case of ID
take_x_by_y( lfd, Value, ID, extra = i, per_row = FALSE )
#> 1 2 3
#> 3 6 9