如何在R中创建分布矩阵
我在 R 中有以下数据框。
ID Date List Type
P-10012 2020-04-15 12:13:15 ABC,ABD,BCD TR1
P-10012 2020-04-15 12:13:15 ABC,ABD,BCD RES
P-10012 2020-04-15 12:13:15 ABC,ABD,BCD FTT
P-10013 2020-04-12 17:10:05 TR1
P-10013 2020-04-12 17:10:05 FTT
P-10013 2020-04-12 17:10:05 ZXR
P-10014 2020-04-10 04:30:19 ABD,BCD TR1
P-10014 2020-04-10 04:30:19 ABD,BCD ZXR
P-10015 2020-04-10 14:13:15 ABC
P-10016 2020-04-10 13:13:15
P-10017 2020-03-18 10:13:15 ABC,ABD,BCD TR1
dput(df)
df <- structure(list(ID = c("P-10012", "P-10012",
"P-10012", "P-10013", "P-10013", "P-10013",
"P-10014", "P-10014", "P-10015", "P-10016",
"P-10017"), Date = c("2020-04-15 12:13:15", "2020-04-15 12:13:15",
"2020-04-15 12:13:15", "2020-04-12 17:10:05", "2020-04-12 17:10:05",
"2020-04-12 17:10:05", "2020-04-10 04:30:19", "2020-04-10 04:30:19",
"2020-04-10 14:13:15", "2020-04-10 13:13:15", "2020-03-18 10:13:15"
), Type = c("TR1", "RES", "FTT", "TR1", "FTT", "ZXR", "TR1", "ZXR", NA, NA, "TR1"), List = c("ABC,ABD,BCD", "ABC,ABD,BCD", "ABC,ABD,BCD",
"", "", "", "ABD,BCD", "ABD,BCD", "ABC", "", "ABC,ABD,BCD")), class = "data.frame", row.names = c(NA,
-11L))
数据帧的结构是,它总是有相同的List特定值ID的情况下,如果有针对特定可多行ID,因为它具有多种不同的价值Type。如果对于一个特定的值ID只有 1 个,Type那么它总是有一行。
我需要创建的月份分布如下Apr-20的List值作为逗号分隔提到的方式和Type价值观。
其中,第7行,我Required Df是重复计数ID根据条件(即是否List或者Type是不是空白的)所有独特的分布List和Type价值。对于这 7 行,Distinct_Count应该除以Total得到Percentage。但是,从第 8 行开始,如果唯一值是形式List,则应除以总不同计数,Non_Blank_List如果该值来自Type,则应除以总不同计数Non_Blank_Type。
在下面的矩阵中,我只想了解List和的独特值的分布是什么,并Type与其他值相结合。
请注意,出于示例目的,我分别简化了3 和 4 个唯一值中的List和Type值,但在我的实际数据框中,它非常高,并且每个月都不同,因此请不要对这些值进行硬编码。
我尝试了多种方法,但仍无法实现所需的输出。
所需的 Df<-
APR-21 Distinct_Count Percentage ABC ABD BCD TR1 RES FTT ZXR
Total_ID 5 100.00% 2 2 2 3 1 2 2
Blank_List 2 40.00% 0 0 0 1 0 1 1
Blank_Type 2 40.00% 1 0 0 0 0 0 0
Both_Blank 1 20.00% 0 0 0 0 0 0 0
Non_Blank_List 3 60.00% 2 2 2 2 1 1 1
Non_Blank_Type 3 60.00% 1 2 2 3 1 1 2
Both_Non_Blank 2 40.00% 1 2 2 2 1 1 1
ABC 1 33.33% 2 1 1 1 1 1 0
ABD 0 0.00% 1 2 2 2 1 1 1
BCD 0 0.00% 1 2 2 2 1 1 1
TR1 0 0.00% 1 2 2 3 1 1 1
RES 0 0.00% 1 1 1 1 1 1 0
FTT 0 0.00% 1 1 1 2 1 2 1
ZXR 0 0.00% 0 1 1 1 0 1 2