R 如何在两列中的行之间找到精确匹配?

R 如何在两列中的行之间找到精确匹配?,r,R,我的数据集中有两列。它包含33000行(巨大)。 第1列称为“姓氏” 第2列称为“昵称” 我需要找出有多少人的姓氏和他们的昵称完全相同。 有人能在R中为我找到一个函数吗?在你的例子中,你只需在两列之间创建一个相等的逻辑测试。在此之后,如果对测试结果的逻辑值求和,则得到具有相同姓氏/昵称的TRUE数或行数 tab <- data.frame( nickname = sample(c("Ana", "Tese", "Maker")

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

我需要找出有多少人的姓氏和他们的昵称完全相同。
有人能在R中为我找到一个函数吗?

在你的例子中,你只需在两列之间创建一个相等的逻辑测试。在此之后,如果对测试结果的逻辑值求和,则得到具有相同姓氏/昵称的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)
tabFîžžž

我的解决方案是在数据框中创建一个新列,如果姓氏和昵称完全相同,则该列指示TRUE;如果姓氏和昵称不完全相同,则指示FALSE

为此,您需要dplyr包:

case\u when()
在指定条件后返回您想要的任何内容


如果您想要更高级的筛选,您需要检查正则表达式是如何工作的。有一些提示。

下面这样一个简单的base 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
df
姓氏昵称
1 A C
2 C A
3 A A
4 B A
5 A B
6 C B
7 C B
8b
9 B C
10摄氏度
>总和(do.call(“==”,df))
[1] 2

if_else()
将是
case_when()
:)我的数据集非常庞大,大约有33000行:(在这种情况下,
case\u when
if\u else
都是不必要的,因为
==
已经给出了一个可以直接作为列添加的逻辑向量。请使用
dput
添加数据,并显示相同的预期输出。请阅读有关的信息以及如何给出一个值。)。
> df
  surname nickname equal_names
1   Smith    Bobby       FALSE
2  Potter   Potter        TRUE
3   Smith    Smith        TRUE
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