我的数据集中有两列。它包含33000行(巨大)。 第1列称为“姓氏” 第2列称为“昵称”
我需要找出多少个姓氏与他们的昵称完全相同。 有人可以在R中找到我的功能吗?
答案 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