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