找出哪些表格有问题

时间:2018-09-11 20:42:30

标签: r excel tableau data-cleaning

我有一个这样的数据集。

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   

1 个答案:

答案 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