【发布时间】:2021-07-30 17:54:45
【问题描述】:
我在 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))
数据框的结构是,如果该特定ID 有多个可用行,那么它对于特定ID 将始终具有相同的List 值,因为它在Type 中有多个不同的值.如果对于特定的 ID 只有 1 个 Type 值,那么它将始终只有一行。
我需要为Apr-20 的List 值和Type 值创建以下分布。
其中,我的Required Df 中的前 7 行是 ID 的不同计数,具体取决于条件(即 List 或 Type 是否为空白)以及所有唯一 List 和 @ 的分布987654336@ 值。对于这 7 行,Distinct_Count 应除以Total 以获得Percentage。但是,从第 8 行开始,如果唯一值是 List 的形式,那么它应该除以 Non_Blank_List 的总非重复计数,如果该值来自 Type,那么它应该除以 @987654343 的总非重复计数@。
在下面的矩阵中,我只是想了解List和Type的唯一值的分布情况以及与其他值的组合。
请注意,出于示例目的,我已分别将 List 和 Type 值简化为 3 和 4 个唯一值,但在我的实际数据框中,它非常高,而且每个月都在变化,所以请不要对值进行硬编码。
我尝试了多种方法,但仍无法达到所需的输出。
必需的 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
【问题讨论】:
-
@akrun- 更新了
dput -
ID是否总是具有相同的Date值? -
@DanChaltiel - 是的,唯一的
ID将具有相同的日期。 -
您确定“Both_Non_Blank”之外的
Distinct_Count吗?只有一行有 ABC,其他列似乎考虑了所有包含 ABC 的行,有或没有其他。 -
@DanChaltiel - 是的,第 2 列
Distinct_Count给出了特定给定条件或值(即 ABC、ABD 等)的不同计数,可用于唯一的ID。而第 2 列之外的列是组合计数以及行中提到的值。
标签: r dataframe dplyr tidyverse