我在R中有下面提到的数据帧。
CusID Date Type LogCat PriceCode
C-1 2021-01-02 14:13:10 Demo
C-2 2021-01-02 13:17:07 Pro SPR, DET, RTD KR
C-2 2021-01-02 14:15:10 Pro SPR, DET, RTD SR
C-2 2021-01-02 16:14:08 Pro SPR, DET, RTD DE
C-3 2021-01-02 17:11:03 Pro DET KL
C-3 2021-01-02 12:14:24 Pro DET ZT
C-3 2021-01-02 12:33:34 Pro DET KR
C-4 2021-01-02 10:43:55 Pro KR
C-5 2021-01-03 20:23:35 Pro SPR, RTD KRDupt<-
structure(list(CustID = c("C-1", "C-2",
"C-2", "C-2", "C-3", "C-3",
"C-3", "C-4", "C-5"), DATE = c("2021-01-02 14:13:10", "2021-01-02 13:17:07", "2021-01-02 14:15:10", "2021-01-02 16:14:08", "2021-01-02 17:11:03", "2021-01-02 12:14:24", "2021-01-02 12:33:34", "2021-01-02 10:43:55", "2021-01-03 20:23:35"), TYPE = c("Demo",
"Pro", "Pro", "Pro", "Pro", "Pro", "Pro", "Pro", "Pro"
), LogCat = c(NA, "SPR,DET,RTD", "SPR,DET,RTD", "SPR,DET,RTD",
"DET", "DET", "DET", NA, " SPR, RTD "), PriceCode = c(NA,"KR", "SR", "DE", "KL", "ZT", "KR", "KR", "KR")), class = "data.frame", row.names = c(NA,
-9L))通过使用上述dataframe,我需要根据日期和月份创建以下两个不同的输出dataframe。例如,假设日期为2021-01-02。
所需数据帧1<-
Total 4 100.00%
Demo 1 25.00%
Pro 3 75.00%对于所需的数据帧2,我们只需要考虑Type不等于Demo的那些CusID。我们需要获得这样的CustId的LogCat和PriceCode的以下计数。这里要注意的是,LogCat和PriceCode中的值不是标准的,并且可以根据日期进行更改,因此我们不能对其进行硬编码。
这里的要求是对于每个唯一的CustID,对LogCate和PriceCode中提到的值进行唯一计数。
例如,DET文本在CustID C-3中唯一可用,没有任何其他逗号分隔值,类似地,KR文本在CustID C-4中唯一可用,在ProceCode列中没有该特定(C-4) CustID的任何其他值。
与每个唯一LogCat和PriceCode值连接在一起的(All)表示它已经与特定列中的其他值组合在一起。
最后一个NA列是静态的,只有当有一些CustID没有LogCat和PRO值,但仍然有Type作为PriceCode时才是静态的。
所需数据帧2<-
LogCat Count % PriceCode Count %
SPR 0 0.00% KR 1 50.00%
SPR (All) 1 50.00% KR (All) 3 100.00%
DET 1 50.00% SR 0 0.00%
DET (All) 2 100.00% SR (All) 1 33.33%
RTD 0 0.00% DE 0 0.00%
RTD (All) 1 50.00% DE (All) 1 33.33%
Blank 1 33.33% ZT 0 0.00%
- - - ZT (All) 1 33.33%
- - - KL 0 0.00%
- - - KL (All) 1 33.33%
- - - Blank 0 0.00%
Both Blank 0 0.00% - 0 0.00%发布于 2021-04-18 15:00:48
对于第一部分,库janitor将是有用的(即使对于第二部分)
第一部分
library(tidyverse)
library(janitor)
df %>% mutate(DATE = as.Date(DATE)) %>% select(1:3) %>%
unique() %>%
tabyl(TYPE, DATE) %>%
adorn_totals("row") %>%
adorn_percentages("col") %>%
adorn_pct_formatting(2) %>%
adorn_ns("front")
TYPE 2021-01-02 2021-01-03
Demo 1 (25.00%) 0 (0.00%)
Pro 3 (75.00%) 1 (100.00%)
Total 4 (100.00%) 1 (100.00%)https://stackoverflow.com/questions/67141156
复制相似问题