如何找到两列中的行之间的完全匹配?

时间:2020-08-27 20:01:43

标签: r

我的数据集中有两列。它包含33000行(巨大)。 第1列称为“姓氏” 第2列称为“昵称”

我需要找出多少个姓氏与他们的昵称完全相同。 有人可以在R中找到我的功能吗?

3 个答案:

答案 0 :(得分:1)

在您的情况下,您只需在两列之间创建逻辑相等性测试即可。此后,如果将由该测试得出的逻辑值相加,则将获得具有相同姓氏/昵称的TRUE数或行数。

tab <- data.frame(
  nickname = sample(c("Ana", "Tese", "Maker"), size = 20, replace = TRUE),
  surname = sample(c("Ana", "Ed", "Philip"), size = 20, replace = TRUE)
)

tab$test <- tab$nickname == tab$surname

sum(tab$test)

答案 1 :(得分:0)

Fàîžà!

我的解决方案涉及在数据框中创建一个新列,如果姓和昵称​​完全相同 ,则为FALSE。完全相同

/ p>

为此,您需要 dplyr 软件包:

surname <- c("Smith", "Potter", "Smith") 
nickname <- c("Bobby", "Potter", "Smith")
df <- data.frame(surname = x, nickname = y)

现在我们有了数据帧,让我们添加 dplyr 代码:

library(dplyr)
df <- df %>% 
  mutate(equal_names = case_when(
    surname == nickname ~ TRUE, 
    surname != nickname ~ FALSE))

结果是:

> df
  surname nickname equal_names
1   Smith    Bobby       FALSE
2  Potter   Potter        TRUE
3   Smith    Smith        TRUE

case_when()在指定条件后返回您想要的任何内容。

如果您想进行更高级的筛选,则需要检查正则表达式的工作方式。 This post对此有一些提示。

答案 2 :(得分:0)

像下面这样的简单基数R可能起作用

sum(do.call("==",df))

示例

df <- structure(list(surname = c("A", "C", "A", "B", "A", "C", "C", 
"B", "B", "C"), nickname = c("C", "A", "A", "A", "B", "B", "B", 
"B", "C", "A")), class = "data.frame", row.names = c(NA, -10L
))

> df
   surname nickname
1        A        C
2        C        A
3        A        A
4        B        A
5        A        B
6        C        B
7        C        B
8        B        B
9        B        C
10       C        A

> sum(do.call("==",df))
[1] 2