首页 > 解决方案 > R - 在数据框的两列中删除相同的名称

问题描述

我正在使用具有两列名称和配偶的数据框。我正在尝试计算异族结婚频率,但我需要删除重复的登记。当我有一个生物的名字时,我需要将此寄存器保留在数据框中,但删除该生物名称是配偶姓名的寄存器。我有以下数据样本:

                    name                      spouse
15                  Finarfin                  Eärwen
6             Tar-Vanimeldë                  Herucalmo
17                   Faramir                  owyn
8               Tar-Meneldur                  Almarian
14   Finduilas of Dol Amroth                  Denethor II
12                    Finwë                  Míriel Serindë then ,Indis
9              Tar-Ancalimë                  Hallacar
7                Tar-Míriel                   Ar-Pharazôn
5          Tarannon Falastur                  Berúthiel
21             Rufus Burrows                  Asphodel Brandybuck
2                     Angrod                  Eldalótë
4               Ar-Gimilzôr                  Inzilbêth
19 Lobelia Sackville-Baggins                  Otho Sackville-Baggins
25            Mrs. Proudfoot                  Odo Proudfoot
22            Rudigar Bolger                  Belba Baggins
24             Odo Proudfoot                  Mrs. Proudfoot
3               Ar-Pharazôn                  Tar-Míriel
13                 Fingolfin                  Anairë
18                Silmariën                  Elatan
23           Rowan Greenhand                  Belba Baggins
20                     Rían                   Huor
1                     Adanel                  Belemir
16           Fastolph Bolger                  Pansy Baggins
10         Morwen Steelsheen                  Thengel
11              Tar-Aldarion                  Erendis
25              Belemir                       Adanel     

例如,我运行了代码,在第 1 行中,它获取了名字 Adanel 并将 Belemir 作为其配偶,所以我需要保留第 1 行,但删除第 25 行,因为这样可以避免重复数据。

我已经尝试过以下代码:

interacialMariage <-data %>% filter(spouse != name) %>% select(name, spouse)

如何从数据框寄存器中获取相同的配偶姓名寄存器?

PS:我需要它来避免区分大小写(Belemir == belemir),这样我以后就没有问题了。

谢谢!

标签: r

解决方案


您可以使用按行字母排序的名称设置另一个向量,并使用该向量进行重复数据删除...

sorted <- sapply(1:nrow(data), 
                 function(i) paste(sort(c(trimws(tolower(data$name[i])),
                                        trimws(tolower(data$spouse[i])))),
                                   collapse=" ")) 
irM <- data[!duplicated(sorted),]

trimws排序和粘贴之前去掉任何前导或尾随空格,tolower并将所有内容转换为小写。


推荐阅读