在R中与原始观测值一起识别重复项(可能通过聚类)

在R中与原始观测值一起识别重复项(可能通过聚类),r,duplicates,R,Duplicates,我怀疑受访者在作弊。我找到了重复的答案,但是如果我只使用duplicated()和/或unique()函数,我只能得到重复的(没有原点)或唯一的值(没有重复项)。我想知道哪一个是从哪一个观测中复制出来的。R中是否有一个函数,我可以很容易地找到哪些观察结果具有相同的答案模式 #df id <- c("l","l","l","p","p","a","a","a") show <- c("broadway","cats","alladin","broadway","cats","broad

我怀疑受访者在作弊。我找到了重复的答案,但是如果我只使用duplicated()和/或unique()函数,我只能得到重复的(没有原点)或唯一的值(没有重复项)。我想知道哪一个是从哪一个观测中复制出来的。R中是否有一个函数,我可以很容易地找到哪些观察结果具有相同的答案模式

#df
id <- c("l","l","l","p","p","a","a","a")
show <- c("broadway","cats","alladin","broadway","cats","broadway","cats","alladin")
v1 <- c(1,2,2,1,3,1,2,1)
v2 <- c(1,2,2,2,4,1,2,3)
v3 <- c(1,2,2,5,1,1,2,4)
df <- data.frame(id,show,v1,v2,v3); df
由于我对dplyr中使用的语法不是很熟悉,我还有一个问题。看起来像是在数据帧的末尾添加了一列(n),但是如果我将函数另存为对象并请求最后一列,它不会返回n。使用此解决方案,我如何找到返回添加了n列的原始数据帧的方法?这就是使用dplyr包时所需输出的样子:

id_e <- c("l","l","l","a","a")
show_e <- c("broadway","cats","alladin","broadway","cats")
v1_e <- c(1,2,2,1,2)
v2_e <- c(1,2,2,1,2)
v3_e <- c(1,2,2,1,2)
dup_cluster <- c(2,3,3,2,3)
df_expected <- data.frame(id_e,show_e,v1_e,v2_e,v3_e,dup_cluster); df_expected
library(dplyr) 


#filter on n, do not create new column
df %>% group_by(v1, v2, v3) %>% filter(n() > 1)

#filter on n, create new column
df %>% group_by(v1, v2, v3) %>% mutate(n = n()) %>% filter(n > 1)
使用dplyr包:

id_e <- c("l","l","l","a","a")
show_e <- c("broadway","cats","alladin","broadway","cats")
v1_e <- c(1,2,2,1,2)
v2_e <- c(1,2,2,1,2)
v3_e <- c(1,2,2,1,2)
dup_cluster <- c(2,3,3,2,3)
df_expected <- data.frame(id_e,show_e,v1_e,v2_e,v3_e,dup_cluster); df_expected
library(dplyr) 


#filter on n, do not create new column
df %>% group_by(v1, v2, v3) %>% filter(n() > 1)

#filter on n, create new column
df %>% group_by(v1, v2, v3) %>% mutate(n = n()) %>% filter(n > 1)
使用dplyr包:

id_e <- c("l","l","l","a","a")
show_e <- c("broadway","cats","alladin","broadway","cats")
v1_e <- c(1,2,2,1,2)
v2_e <- c(1,2,2,1,2)
v3_e <- c(1,2,2,1,2)
dup_cluster <- c(2,3,3,2,3)
df_expected <- data.frame(id_e,show_e,v1_e,v2_e,v3_e,dup_cluster); df_expected
library(dplyr) 


#filter on n, do not create new column
df %>% group_by(v1, v2, v3) %>% filter(n() > 1)

#filter on n, create new column
df %>% group_by(v1, v2, v3) %>% mutate(n = n()) %>% filter(n > 1)
使用
库(data.table)
我们可以

setDT(df)[, .(.N, id, show) , by=.(v1,v2,v3)][N>1,]
使用
库(data.table)
我们可以

setDT(df)[, .(.N, id, show) , by=.(v1,v2,v3)][N>1,]

@nrussell,我不认为这是一个重复的问题,因为这里有多个重复的集群。df[6,]是df[1](群集1)的副本,df[3,]和df[7,]是df[2](群集2)的副本。请添加预期的输出。很抱歉,仍在学习堆栈溢出:)。我刚刚添加了一个预期的输出。在base R中,您可以简单地使用
duplicated
duplicated
fromLast=TRUE
df[duplicated(df[,3:5])duplicated(df[,3:5],fromLast=TRUE),]
@nrussell,我认为这不是一个重复的问题,因为这里有多个重复集群。df[6,]是df[1](群集1)的副本,df[3,]和df[7,]是df[2](群集2)的副本。请添加预期的输出。很抱歉,仍在学习堆栈溢出:)。我刚刚添加了一个预期的输出。在base R中,您可以简单地使用
duplicated
duplicated
fromLast=TRUE
df[duplicated(df[,3:5])| duplicated(df[,3:5],fromLast=TRUE),]
Yes!!!!这完全是我需要的。我有一个更大的数据集,现在要把这个函数和那个函数匹配起来。以后可能会有一些问题,但现在:非常感谢!:)好了,它来了。我不太熟悉dplyr中使用的语法。看起来像是在数据帧的末尾添加了一列(n),但是如果我将函数另存为对象并请求最后一列,它不会返回n。使用此解决方案,我如何找到返回添加了n列的原始数据帧的方法?我在最初的问题中提供了一个规范。好的,谢谢大家。我已经上传了我的原始问题,所以它也涉及到最终的解决方案。是的!!!!这完全是我需要的。我有一个更大的数据集,现在要把这个函数和那个函数匹配起来。以后可能会有一些问题,但现在:非常感谢!:)好了,它来了。我不太熟悉dplyr中使用的语法。看起来像是在数据帧的末尾添加了一列(n),但是如果我将函数另存为对象并请求最后一列,它不会返回n。使用此解决方案,我如何找到返回添加了n列的原始数据帧的方法?我在最初的问题中提供了一个规范。好的,谢谢大家。我已经上传了我的原始问题,所以它也涉及到最终的解决方案。