Я хотел бы сравнить столбцы, и затем, в зависимости от того, что меньше, следует заменить одну из переменных.
Вот пример:
Пример кадра данных:
#sample dataframe
data_example <- data.frame(var_a = c(1:10), var_b = c(6:9, NA, 1:5), var_c = c(NA, NA, 1:7, NA), var_d = c(1:10), var_e = c(1:5, 6:10))
var_a var_b var_c var_d var_e
1 1 6 NA 1 1
2 2 7 NA 2 2
3 3 8 1 3 3
4 4 9 2 4 4
5 5 NA 3 5 5
6 6 1 4 6 6
7 7 2 5 7 7
8 8 3 6 8 8
9 9 4 7 9 9
10 10 5 NA 10 10
Требуемый выход:
#desired output
data_example <- data.frame(var_a = c(6,7,1,2,3,1,2,3,4,5), var_b = c(6:9, NA, 1:5), var_c = c(NA, NA, 1:7, NA), var_d = c(1:10), var_e = c(1:5, 6:10))
var_a var_b var_c var_d var_e
1 6 6 NA 1 1
2 7 7 NA 2 2
3 1 8 1 3 3
4 2 9 2 4 4
5 3 NA 3 5 5
6 1 1 4 6 6
7 2 2 5 7 7
8 3 3 6 8 8
9 4 4 7 9 9
10 5 5 NA 10 10
Я попытался 2 подхода для этого:
Подход 1:
data_example <- data_example %>%
mutate_at(var_a = case_when(
var_b < var_c | var_c == NA_real_ ~ var_b,
var_c < var_b | var_b == NA_real_ ~ var_c
))
Дает ошибку:
Error in check_dot_cols(.vars, .cols) :
argument ".vars" is missing, with no default
Подход 2:
data_example$var_a <- case_when(
data_example$var_b < data_example$var_c | data_example$var_c == NA_real_ ~ data_example$var_b,
data_example$var_c < data_example$var_b | data_example$var_b == NA_real_ ~ data_example$var_c
)
var_a var_b var_c var_d var_e
1 NA 6 NA 1 1
2 NA 7 NA 2 2
3 1 8 1 3 3
4 2 9 2 4 4
5 NA NA 3 5 5
6 1 1 4 6 6
7 2 2 5 7 7
8 3 3 6 8 8
9 4 4 7 9 9
10 NA 5 NA 10 10
Код дает NA
с var_c
или var_b
, когда в этих столбцах вместо NA
вместо значения изvar_b
или var_c
.
Если есть решение с использованием пакетов dplyr
или purrr
, которое было бы замечательно.
Спасибо