r - 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),这样我以后就没有问题了。
谢谢!
解决方案
您可以使用按行字母排序的名称设置另一个向量,并使用该向量进行重复数据删除...
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
并将所有内容转换为小写。
推荐阅读
- swift - SceneDelegate中Launch和第一个ViewController之间黑屏闪烁
- multithreading - std::packaged_task 和 std::function 的行为
- haskell - Combining generator for different datatypes in Quickcheck
- android - 有什么方法可以在不替换片段的情况下替换单个片段的数据?
- perl - 如何在 perl5 的格式语句中使用子例程参数?
- python - 给定一个带有空格的英文句子,我如何在 python 中估计特定单词适合该空格的概率?
- visual-studio - 在 Rider 中发布 Visual Studio 的数据库功能
- php - 显示带有两个标题的 PHP 数组中的 HTML 表
- r - 使用 R 在 for 循环中生成可重现的结果
- django - 如何创建特定的 django-model 字段,每天包含一个日期和唯一的数字?