如何找到R中至少有一个相同参数的项目?

时间:2015-10-05 06:52:32

标签: r match

我知道如何找到具有相同参数的项目,但是当有很多参数并且我想找到至少有一个相同参数的项目时,我不知道是否有任何我可以使用的功能。 例如,我有一个表,每个项目有2个参数:

Mydata<-data.frame(item=1:4,P1=c(7,12,11,8),P2=c(12,3,11,7))
Mydata
#   item  P1  P2
# 1    1   7  12
# 2    2  12   3
# 3    3  11  11
# 4    4   8   7

在示例中,item1和item2都有参数12,因此它们是相似的。我期望得到一个表格,显示该项目及其类似项目可能是这样的:

#  item  x1  x2
#    1   2   4
#    2   1  NA
#    3  NA  NA
#    4   1  NA

有没有可以做到这一点的功能?

1 个答案:

答案 0 :(得分:2)

您可以使用R

的单个循环进行基础sapply
Mydata <- data.frame(item=1:4,P1=c(7,12,11,8),P2=c(12,3,11,12))

#  item P1 P2
#1    1  7 12
#2    2 12  3
#3    3 11 11
#4    4  8 12

m = Mydata[-1]

res = sapply(1:nrow(m), function(i){

    mat = matrix(is.element(unlist(m), m[i,]), ncol=ncol(m))
    x   = Filter(function(x) x!=i, which(!!rowSums(mat)))

    if(length(x)==0) 
        return(rep(NA,ncol(m)))

    c(Mydata[,1][x], rep(NA, ncol(m)-length(x)))
})

cbind(Mydata[1], t(res))
#  item  1  2
#1    1  2  4
#2    2  1  4
#3    3 NA NA
#4    4  1  2