У меня есть фрейм данных ...
df <- tibble(
id = 1:10,
family = c("a","a","b","b","c", "d", "e", "f", "g", "h"),
col1_a = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
col1_b = c(1, 2, 3, 4, NA, NA, NA, NA, NA, NA),
col2_a = c(11, 12, 13, 14, 15, 16, 17, 18, 19, 20),
col2_b = c(11, 12, 13, 14, NA, NA, NA, NA, NA, NA),
)
Семьи будут содержать не более 2 членов (так что они либо отдельные лица, либо пары).
Для отдельных лиц (семьи только с одна строка, т.е. id = 5:10), я хочу случайным образом переместить 50% данных из столбцов, заканчивающихся на «a», в столбцы, заканчивающиеся на «b».
К концу данные должны выглядеть как показано ниже (в зависимости от того, какие 50% строк используются) ...
df <- tibble(
id = 1:10,
family = c("a","a","b","b","c", "d", "e", "f", "g", "h"),
col1_a = c(1, 2, 3, 4, 5, NA, 7, NA, 9, NA),
col1_b = c(1, 2, 3, 4, NA, 6, NA, 8, NA, 10),
col2_a = c(11, 12, 13, 14, NA, NA, 17, 18, NA, 20),
col2_b = c(11, 12, 13, 14, 15, 16, NA, NA, 19, NA),
)
Я хотел бы иметь возможность сделать это с помощью комбинации group_by и mutate, поскольку я в основном использую Tidyverse.
Обновление: я забыл упомянуть, что значения в столбцах, оканчивающихся на «a», должны быть заменены на NA, если они перемещены на «b».