我有一个这样的数据集。
NA. CODE ASSESSMENT_FORM_VERSION COLLEGE_CODE TOTAL_ITEMS SHARED_ITEMS
1 4020.1.2-01.8x.A.V1 AAO1.4.A IT 45 8
2 4020.1.3-02.1x.A.V1 AAO1.4.A IT 45 8
3 4020.1.1-06.1x.A.V1 AAO1.4.A IT 45 8
4 4020.1.3-02.2x.A.V1 AAO1.4.A IT 45 8
5 4020.1.3-04.2x.A.V1 AAO1.4.A IT 45 8
6 4020.1.2-06.5x.A.V1 AAO1.4.A IT 45 8
7 4020.1.5-07.1x.A.V1 AAO1.4.A IT 45 8
8 4020.1.1-04.5x.A.V1 AAO1.4.A IT 45 8
9 4020.1.2-01.8x.A.V1 AAO1.4.B IT 49 8
10 4020.1.3-02.1x.A.V1 AAO1.4.B IT 49 8
11 4020.1.1-06.1x.A.V1 AAO1.4.B IT 49 8
12 4020.1.3-02.2x.A.V1 AAO1.4.B IT 49 8
13 4020.1.3-04.2x.A.V1 AAO1.4.B IT 49 8
我想做的是找出其他与每个表格共享问题的表格。 例如,ASSESSMENT_FORM_VERSION AA01.4.A与AAO1.4.B共享了一些问题。我希望每种形式都可以看到。我还想知道一个表单与另一个表单共享多少个问题。在上面的示例中,AAO1.4.A与AAO1.4.B共享5个问题。所以我想要类似
NA ASSESSMENT_FORM_VERSION SHARED Number of Shared codes
1 AAO1.4.A AAO1.4.B 5
答案 0 :(得分:1)
您需要自联接数据集,并对其进行过滤,以适应左侧表单名称少于右侧表单名称的情况。
这是使用data.table
的解决方案:
library(data.table)
dt <- read.table(text =
"row CODE ASSESSMENT_FORM_VERSION COLLEGE_CODE TOTAL_ITEMS SHARED_ITEMS
1 1 4020.1.2-01.8x.A.V1 AAO1.4.A IT 45 8
2 2 4020.1.3-02.1x.A.V1 AAO1.4.A IT 45 8
3 3 4020.1.1-06.1x.A.V1 AAO1.4.A IT 45 8
4 4 4020.1.3-02.2x.A.V1 AAO1.4.A IT 45 8
5 5 4020.1.3-04.2x.A.V1 AAO1.4.A IT 45 8
6 6 4020.1.2-06.5x.A.V1 AAO1.4.A IT 45 8
7 7 4020.1.5-07.1x.A.V1 AAO1.4.A IT 45 8
8 8 4020.1.1-04.5x.A.V1 AAO1.4.A IT 45 8
9 9 4020.1.2-01.8x.A.V1 AAO1.4.B IT 49 8
10 10 4020.1.3-02.1x.A.V1 AAO1.4.B IT 49 8
11 11 4020.1.1-06.1x.A.V1 AAO1.4.B IT 49 8
12 12 4020.1.3-02.2x.A.V1 AAO1.4.B IT 49 8
13 13 4020.1.3-04.2x.A.V1 AAO1.4.B IT 49 8
", stringsAsFactors = F)
questions <- data.table(dt)
question.matches <- merge(questions, questions, by = "CODE")
question.matches <- question.matches[ASSESSMENT_FORM_VERSION.x < ASSESSMENT_FORM_VERSION.y]
question.matches[, .(matches = .N), .(ASSESSMENT_FORM_VERSION.x, ASSESSMENT_FORM_VERSION.y)]
# ASSESSMENT_FORM_VERSION.x ASSESSMENT_FORM_VERSION.y matches
# 1: AAO1.4.A AAO1.4.B 5