Сводный отчет по подсчетам в подкластерах - PullRequest
2 голосов
/ 23 марта 2020

У меня есть набор данных, как показано ниже.

Требуется только подсчитать количество IP-адресов. И родитель, и дочерний элемент в кластере - это IP, только P & T - и родитель, и дочерний элемент в подкластере внутри. кластер - P & T IP-> P & T - когда Parent - IP, а Child - P & T в подкластере в кластере P & T-> IP - когда Parent - P & T - & IP - IP в подкластере в кластере

Final_cluster   Relation    Subcluster  Category
5               Parent          1       IP
5               Child           1       IP
5               Child           1       IP
5               Child           4       IP
5               Parent          4       P&T
5               Parent          5       IP
5               Child           5       P&T
5               Child           5       P&T
5               Child           5       P&T
5               Child           5       P&T
7               Parent          1       P&T
7               Child           1       P&T
7               Parent          2       IP
7               Child           2       IP
7               Parent          3       P&T
7               Child           3       P&T
7               Child           7       IP
7               Child           7       P&T
7               Parent          7       P&T

Итак, конечный результат будет выглядеть так:

Cluster     IP-> IP     P&T->P&T    IP-> P&T    P&T->IP
5               1           1           2   
7               1           2           1   

Мне удалось создать счетчик отдельной категории, используя ниже sqldf

single_cat <- sqldf("SELECT Final_Cluster, Subcluster, category, COUNT(distinct(category)) AS count_single 
                    FROM final_output_csv 
                    GROUP BY Final_cluster, Subcluster
                    HAVING COUNT(distinct(category)) = 1")

single_cat_final <- sqldf("SELECT Final_Cluster,category, count(count_single) As total_count
                    FROM single_cat 
                    GROUP BY Final_cluster,category ")

1 Ответ

0 голосов
/ 24 марта 2020

Мне удалось решить проблему с помощью нескольких шагов, используя sqldf. Если кто-нибудь может опубликовать лучший метод. Пожалуйста, поделитесь.

single_cat <- sqldf("SELECT Final_Cluster, New_Subcol5, category, COUNT(distinct(category)) AS count_single 
                    FROM final_output_csv 
                    GROUP BY Final_cluster, New_subcol5 
                    HAVING COUNT(distinct(category)) = 1")

single_cat_final <- sqldf("SELECT Final_Cluster,category, count(count_single) As total_count
                    FROM single_cat 
                    GROUP BY Final_cluster,category ")

IP_only <- sqldf("SELECT Final_cluster, category, total_count FROM single_cat_final WHERE category = 'IP' ")

PT_only <- sqldf("SELECT Final_cluster, category, total_count FROM single_cat_final WHERE category = 'P&T' ")

####
info1 <- sqldf("SELECT Final_Cluster as A, New_Subcol5 as B FROM final_output_csv GROUP BY Final_cluster, New_subcol5 HAVING COUNT(distinct(category)) = 2")
subset_IP <- sqldf("SELECT Final_Cluster, New_Subcol5, Relation, category 
                   FROM final_output_csv,info1 
                   WHERE final_output_csv.Final_Cluster = info1.A 
                   AND final_output_csv.New_Subcol5 = info1.B 
                   AND final_output_csv.Relation= 'Parent' and category = 'IP'")
IP_PT <- sqldf("SELECT Final_Cluster, count(New_Subcol5) AS total_count_IP_PT from subset_IP GROUP BY Final_Cluster")

subset_PT <- sqldf("SELECT Final_Cluster, New_Subcol5, Relation, category 
                   FROM final_output_csv,info1 
                   WHERE final_output_csv.Final_Cluster = info1.A 
                   AND final_output_csv.New_Subcol5 = info1.B 
                   AND final_output_csv.Relation= 'Parent' and category = 'P&T'")
PT_IP <- sqldf("SELECT Final_Cluster, count(New_Subcol5) AS total_count_PT_IP from subset_PT GROUP BY Final_Cluster")

final_cat<- merge(merge(merge(IP_only,PT_only,by='Final_cluster',all = TRUE),IP_PT,by='Final_cluster',all = TRUE),PT_IP,by='Final_cluster',all = TRUE)
...