身元を保護するために、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)
のようなものを使用することができました。
私の質問は、spouse
列を再配置して新しい無作為化された姓が反映されるように、関係するid
との列をどうやって使うことができますか?すなわち、最終的な予想される出力は次のようになります。
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で実行したことはありません.Excelでは入れ子にされたVLOOKUP関数になると思います...
ありがとう、申し訳ありませんが、それは非常に具体的ですが、うまくいけば、
は、あなたが期待される出力を表示することができ、その後、あなたのNASが、実際のNAと仮定すると? – akrun
@akrun申し訳ありません、正しく編集されました! – Von
NAストリングまたは実際のNAもありますか?あなたの例では文字列があります – Sotos