У меня есть этот набор данных:
nhhmembers <- c(1, 4, 2, 5, 3, 5)
hhmember1 <- c(1994, 2020, 1943, 1946, 1970, 1989)
hhmember2 <- c(NA, 2000, 1950, 1970, 1969, 1980)
hhmember3 <- c(NA, 1990, NA, 1999, 2011, 2014)
hhmember4 <- c(NA, 1975, NA, 1989, NA, 2018)
hhmember5 <- c(NA, NA, NA, 1997, NA, 2015)
df <- data.frame(nhhmembers , hhmember1, hhmember2, hhmember3, hhmember4, hhmember5)
Я хочу создать новую переменную nkids, которая считает через hhmember1-5 все годы, что делает возраст (2021 минус hhmemberx) меньше 18.
Таким образом, в этом случае nkids должно быть 0, 1, 0, 0, 1, 3.
Я не могу понять, как лучше всего это сделать, не делая очень длинного case_when.





Однострочный базовый R:
rowSums(2021 - df[-1] < 18, na.rm = TRUE)
#[1] 0 1 0 0 1 3
Это просматривает весь фрейм данных. Что, если мы предположим, что столбцов больше?
@VictorNielsen Это просматривает все столбцы, кроме первого. df[-1] удаляет 1-й столбец и сохраняет все остальные таким образом, который не зависит от количества столбцов.
Как мне вместо этого указать конкретные имена столбцов?
Вам нужно будет иметь вектор имен столбцов или чисел и использовать df[vec_of_cols]. Если в именах столбцов есть шаблон, возможно, grep может дать вам вектор.
Я думаю, вам лучше преобразовать в длинный формат, вычислить возраст, а затем подвести итоги.