Я думаю, что основная проблема заключается в том, чтобы решить, какое значение оставить в случае, если у вас есть разные значения в отдельных строках для одного и того же кандидата (хотя в вашем примере это не так).В обоих моих предложениях используется tidyverse
.
Первое решение, которое приходит мне в голову, - это выбрать строку с наименьшим количеством пропущенных значений в качестве допустимой записи:
(data <- tibble(name = c("A.S. Hopingson", "a.S. Hopingson", "A.S.Hopingson"),
var_1 = c(1, 2, NA),
var_2 = c(1, NA, NA)))
# A tibble: 3 x 3
name var_1 var_2
<chr> <dbl> <dbl>
1 A.S. Hopingson 1 1
2 a.S. Hopingson 2 NA
3 A.S.Hopingson NA NA
data %>%
mutate(name_new = str_replace_all(str_to_lower(name), "[^[:alpha:]]", ""), # create name that consists only of letters
missing = rowSums(is.na(.))) %>% # count missing values per row
arrange(name_new, missing) %>% # arrange by missing values
group_by(name_new) %>%
filter(row_number() == 1) %>% # filter for first row (i.e. that with lowest number of missing values
ungroup() %>%
select(-name_new, -missing)
# A tibble: 1 x 3
name var_1 var_2
<chr> <dbl> <dbl>
1 A.S. Hopingson 1 1
Каккак видите, значение 2
для var_1[2]
сброшено.В качестве альтернативы, вы можете выбрать первое не пропущенное значение для каждой переменной и объединить эти строки:
(data <- tibble(name = c("A.S. Hopingson", "a.S. Hopingson", "A.S.Hopingson"),
var_1 = c(1, 1, NA),
var_2 = c(NA, 2, NA)))
# A tibble: 3 x 3
name var_1 var_2
<chr> <dbl> <dbl>
1 A.S. Hopingson 1 NA
2 a.S. Hopingson 1 2
3 A.S.Hopingson NA NA
data %>%
mutate(name_new = str_replace_all(str_to_lower(name), "[^[:alpha:]]", "")) %>%
select(-name) %>%
gather(key, value, -name_new) %>%
unique() %>%
filter(!is.na(value)) %>%
group_by(name_new, key) %>%
filter(row_number() == 1) %>%
ungroup() %>%
spread(key, value)
# A tibble: 1 x 3
name_new var_1 var_2
<chr> <dbl> <dbl>
1 ashopingson 1 2
В случае, если вам нужны записи из обеих строк (например, потому что они оба являются правильными), вам придется вложитьваши данные или объединить значения в одну строку.