R 如何在表中找到类似的行?
我对调查数据有一个问题,即有来自同一IP的非常相似的虚假回复——基本上是人们大多数时候点击并做出相同的回答。然而,我确实有一些来自同一IP的真实回复,所以我不能只对其进行过滤 我希望做的是以类似于查找重复行的方式查找“相似”行,但约束条件放松,结果是相似性分数(即第1行中的值与第2行中的值匹配的百分比)。我找不到这个包裹R 如何在表中找到类似的行?,r,R,我对调查数据有一个问题,即有来自同一IP的非常相似的虚假回复——基本上是人们大多数时候点击并做出相同的回答。然而,我确实有一些来自同一IP的真实回复,所以我不能只对其进行过滤 我希望做的是以类似于查找重复行的方式查找“相似”行,但约束条件放松,结果是相似性分数(即第1行中的值与第2行中的值匹配的百分比)。我找不到这个包裹 require(tidyverse) require(janitor) x <- structure(list(group = c("a", "a", "a", "a",
require(tidyverse)
require(janitor)
x <- structure(list(group = c("a", "a", "a", "a", "a", "a", "a", "a",
"a", "a", "b", "b", "b", "b", "b", "c", "c", "c", "c", "c"),
val1 = c(2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 1),
val2 = c(1, 1, 1, 2, 1, 2, 2, 3, 3, 3, 1, 1, 3, 2, 3, 2, 3, 1, 3, 1),
val3 = c(4, 3, 5, 1, 1, 5, 3, 5, 5, 4, 2, 3, 4, 5, 3, 2, 3, 1, 3, 4),
val4 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), val5 = c(1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 2),
val6 = c(2, 2, 1, 2, 1, 2, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 2, 2, 1, 2)),
row.names = c(NA, -20L), class = c("tbl_df", "tbl", "data.frame"))
x %>% get_dupes()
#No variable names specified - using all columns.
# A tibble: 2 x 8
# group val1 val2 val3 val4 val5 val6 dupe_count
# <chr> <dbl> <dbl> <dbl> <int> <dbl> <dbl> <int>
#1 a 1 3 5 1 1 1 2
#2 a 1 3 5 1 1 1 2
x %>% get_dupes(val1, val2, val4, val5, val6)
# # A tibble: 14 x 8
# val1 val2 val4 val5 val6 dupe_count group val3
# <dbl> <dbl> <int> <dbl> <dbl> <int> <chr> <dbl>
# 1 1 1 1 2 2 3 a 3
# 2 1 1 1 2 2 3 c 1
# 3 1 1 1 2 2 3 c 4
# 4 1 2 1 2 2 2 a 1
# 5 1 2 1 2 2 2 b 5
# 6 1 3 1 1 1 3 a 5
# 7 1 3 1 1 1 3 a 5
# 8 1 3 1 1 1 3 b 4
# 9 1 3 1 2 2 2 a 4
# 10 1 3 1 2 2 2 c 3
# 11 2 1 1 1 2 2 a 4
# 12 2 1 1 1 2 2 b 2
# 13 2 3 1 1 1 2 b 3
# 14 2 3 1 1 1 2 c 3
require(tidyverse)
要求(看门人)
x%获得重复次数()
#未指定变量名称-使用所有列。
#一个tibble:2x8
#组val1 val2 val3 val4 val5 val6重复计数
#
#1A1351112
#2 a 1 3 5 1 1 2
x%>%get_重复(值1、值2、值4、值5、值6)
##A tibble:14 x 8
#val1 val2 val4 val5 val6重复计数组val3
#
#111123A3
#2 1 1 2 3 c 1
#311123C4
#4 1 2 1 2 2 a 1
#512122B5
#613113A5
#713113A5
#8131313B4
#91312A4
#101312C3
#112112A4
#12 2 1 1 2 b 2
#13 2 3 1 1 2 b 3
#14 2 3 1 1 2 c 3
请注意,只有两个实际的副本,但主要是因为val3。如果我们将其从重复项检查中删除,则有14个
我想知道的是,对于这14行,它们有
ncol(x)-1
相似性,或1不相似性。但是,我不在乎它在哪里,所以它需要是动态的。这是一种基本上基于双循环比较行的方法。本质上,您需要将n
行与n-1
其他行进行比较,并计算行的相似性。下面的函数正是这样做的
如果您正在考虑更通用的方法来处理重复,您可以查看RecordLinkage
包,它可以让您计算字段之间更通用的相似性分数,并使用一些无监督的分类算法来确定重复
然而,以下是一种功能性方法:
require(tidyverse)
要求(看门人)
x%获得重复次数()
#>未指定变量名称-使用所有列。
#>#A tibble:2 x 8
#>组val1 val2 val3 val4 val5 val6重复计数
#>
#>1A1351112
#>2 a 1 3 5 1 1 2
#用于比较行和返回不匹配数的辅助函数
row_comp这是一种基本上基于双循环比较行的方法。本质上,您需要将n
行与n-1
其他行进行比较,并计算行的相似性。下面的函数正是这样做的
如果您正在考虑更通用的方法来处理重复,您可以查看RecordLinkage
包,它可以让您计算字段之间更通用的相似性分数,并使用一些无监督的分类算法来确定重复
然而,以下是一种功能性方法:
require(tidyverse)
要求(看门人)
x%获得重复次数()
#>未指定变量名称-使用所有列。
#>#A tibble:2 x 8
#>组val1 val2 val3 val4 val5 val6重复计数
#>
#>1A1351112
#>2 a 1 3 5 1 1 2
#用于比较行和返回不匹配数的辅助函数
世界其他地区公司