У меня есть кадр данных отдельных лиц и их супругов с некоторой личной информацией (то есть фамилиями), которые я рандомизировал с помощью plyr :: mapvalues для защиты идентификаторов. Вот воспроизводимый пример того, как он выглядел до и после изменения фамилии:Повторно заполнить столбец в реляционном кадре данных после рандомизации в R
# before
d <- data.frame(id = c(1:6),
first_name = c('Jeff', 'Marilyn', 'Gwyn',
'Alice', 'Sam', 'Sarah'),
surname = c('Goldbloom', 'Monroe', 'Paltrow', 'Goldbloom',
'Smith', 'Silverman'),
spouse_id = c(2, 1, 1, 5, 4, "NA"),
spouse = c('Marilyn Monroe', 'Jeff Goldbloom', 'Jeff Goldbloom',
'Sam Smith', 'Alice Goldbloom', 'NA'))
d
> id first_name surname spouse_id spouse
1 Jeff Goldbloom 2 Marilyn Monroe
2 Marilyn Monroe 1 Jeff Goldbloom
3 Gwyn Paltrow 1 Jeff Goldbloom
4 Alice Goldbloom 5 Sam Smith
5 Sam Smith 4 Alice Goldbloom
6 Sarah Silverman NA NA
# replacement names to serve as surnames (doesn't matter what they are, just
that the ratios remain the same as before; mapvalues takes care of this)
repnames <- c("Arman" , "Clovis" , "Garner" , "Casey" , "Birch")
s <- unique(d$surname)
d$surname <- plyr::mapvalues(d$surname, from = s, to = repnames) #replace surnames
# After replacement, the dataframe looks like:
d
> id first_name surname spouse_id spouse
1 Jeff Arman 2 Marilyn Monroe
2 Marilyn Clovis 1 Jeff Goldbloom
3 Gwyn Garner 1 Jeff Goldbloom
4 Alice Arman 5 Sam Smith
5 Sam Casey 4 Alice Goldbloom
6 Sarah Birch NA NA
Каждый человек имеет свой собственный id
номер, но не все люди имеют супругов. Если у человека есть супруг (а), его супруг (а) id
отражен в столбце spouse_id
. Я сделал это так, чтобы позже я мог фильтровать отдельных лиц и их супругов, используя что-то вроде dplyr::filter(d, spouse %in% spouse_id)
.
Мой вопрос, как я могу использовать реляционные id
и spouse_id
столбцы повторно заполнить spouse
колонку так, чтобы она отражала новые рандомизированные фамилии? то есть окончательный ожидаемый результат будет:
id first_name surname spouse_id spouse
1 Jeff Arman 2 Marilyn Clovis
2 Marilyn Clovis 1 Jeff Arman
3 Gwyn Garner 1 Jeff Arman
4 Alice Arman 5 Sam Casey
5 Sam Casey 4 Alice Arman
6 Sarah Birch NA NA
... Так что некоторые конкатенации будут задействованы на first_name
и surname
колонн. Я никогда не делал что-то довольно условное в R - в Excel. Думаю, это были бы вложенные функции VLOOKUP ...
Спасибо, извините, это так специфично, но, надеюсь, это представляет интересный вызов кому-то там.
Вы можете показать ожидаемый результат? – akrun
@akrun извините, отредактирован правильно сейчас! – Von
Также есть ваши строки NA или фактические НС? В вашем примере строки – Sotos