在R中按组顺序匹配和计数值

在R中按组顺序匹配和计数值,r,match,sequence,R,Match,Sequence,以下是我的数据: group <- c(1,1,1,1,2,2,2,3,3,4,4,4,4) X1 <- c("A","A","A","A","B","A","B","A","A","B","B","B","B") X2 <- c("A","A","A","A","B","B","B","A","A","B","B","A","A") X3 <- c("B","A","A","A","B","B","B","B","B","B","B","B","B") X4 <-

以下是我的数据:

group <- c(1,1,1,1,2,2,2,3,3,4,4,4,4)
X1 <- c("A","A","A","A","B","A","B","A","A","B","B","B","B")
X2 <- c("A","A","A","A","B","B","B","A","A","B","B","A","A")
X3 <- c("B","A","A","A","B","B","B","B","B","B","B","B","B")
X4 <- c("A","A","A","B","B","B","A","A","A","B","A","B","B")
X5 <- c("A","A","A","A","B","B","B","A","A","A","B","B","B")
X6 <- c("A","A","A","A","B","A","B","A","A","B","B","A","A")
mydf <- data.frame (group, X1, X2, X3, X4, X5, X6)
现在我需要将第一行与组中的其余行进行比较

   group X1 X2 X3 X4 X5 X6
1      1  A  A  B  A  A  A
2      1  A  A  A  A  A  A
          TRUE TRUE FALSE TRUE TRUE TRUE
这里不匹配仅在X3处。六分之一=1/6=17%

同样,将第1组中的第3个与第1个进行比较

   group X1 X2 X3 X4 X5 X6
1      1  A  A  B  A  A  A
3      1  A  A  A  A  A  A
   group X1 X2 X3 X4 X5 X6
1      1  A  A  B  A  A  A
4      1  A  A  A  B  A  A
不匹配=17%

同时将第1组中的第4名与第1名进行比较

   group X1 X2 X3 X4 X5 X6
1      1  A  A  B  A  A  A
3      1  A  A  A  A  A  A
   group X1 X2 X3 X4 X5 X6
1      1  A  A  B  A  A  A
4      1  A  A  A  B  A  A
不匹配=2/6=34%

第2组的情况类似(第1排第2组,即5和6)

不匹配=2/6=34%

同样地:

         group X1 X2 X3 X4 X5 X6
    5      2  B  B  B  B  B  B
    7      2  B  B  B  A  B  B
不匹配=1/6=17%

我的审判:

match (mydf[1,], mydf[2,])
match (mydf[1,], mydf[3,])
试试这个:

match_ratio <- function(x)
   cbind(x, match_ratio = rowMeans(mapply(`==`, x[1, -1], x[, -1])))
library(plyr)
ddply(mydf, "group", match_ratio)

#    group X1 X2 X3 X4 X5 X6 match_ratio
# 1      1  A  A  B  A  A  A   1.0000000
# 2      1  A  A  A  A  A  A   0.8333333
# 3      1  A  A  A  A  A  A   0.8333333
# 4      1  A  A  A  B  A  A   0.6666667
# 5      2  B  B  B  B  B  B   1.0000000
# 6      2  A  B  B  B  B  A   0.6666667
# 7      2  B  B  B  A  B  B   0.8333333
# 8      3  A  A  B  A  A  A   1.0000000
# 9      3  A  A  B  A  A  A   1.0000000
# 10     4  B  B  B  B  A  B   1.0000000
# 11     4  B  B  B  A  B  B   0.6666667
# 12     4  B  A  B  B  B  A   0.5000000
# 13     4  B  A  B  B  B  A   0.5000000
匹配率
如果使用
comparison2

> head(matches)
       X1    X2    X3    X4    X5    X6
1,2  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
1,3  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
1,4  TRUE  TRUE FALSE FALSE  TRUE  TRUE
1,5 FALSE FALSE  TRUE FALSE FALSE FALSE
1,6  TRUE FALSE  TRUE FALSE FALSE  TRUE
1,7 FALSE FALSE  TRUE  TRUE FALSE FALSE

行名称与您正在比较的一对行号相对应。

您能给出准确的预期输出,包括数据结构吗?同一组中的每一行都得到相同的分数吗?@josilber将第一行与2和收益率不匹配百分比进行比较,然后将第一行与3和收益率不匹配进行比较,依此类推。想法是每个小组的第一行作为templeteNice工作
ddply
功能强大。我的解决方案更原始。
> head(matches)
    X1 X2 X3 X4 X5 X6
1,2  1  1 NA  1  1  1
1,3  1  1 NA  1  1  1
1,4  1  1  4  1  1  1
1,5 NA NA  1 NA NA NA
1,6  1  1  2  1  1  1
1,7  4  4  1  4  4  4
> head(matches)
       X1    X2    X3    X4    X5    X6
1,2  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
1,3  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
1,4  TRUE  TRUE FALSE FALSE  TRUE  TRUE
1,5 FALSE FALSE  TRUE FALSE FALSE FALSE
1,6  TRUE FALSE  TRUE FALSE FALSE  TRUE
1,7 FALSE FALSE  TRUE  TRUE FALSE FALSE