Ho un frame di dati di seguito indicato:
structure(
list(ID = c("P-1", " P-1", "P-1", "P-2", "P-3", "P-4", "P-5", "P-6", "P-7",
"P-8"),
Date = c("2020-03-16 12:11:33", "2020-03-16 13:16:04",
"2020-03-16 06:13:55", "2020-03-16 10:03:43",
"2020-03-16 12:37:09", "2020-03-16 06:40:24",
"2020-03-16 09:46:45", "2020-03-16 12:07:44",
"2020-03-16 14:09:51", "2020-03-16 09:19:23"),
Status = c("SA", "SA", "SA", "RE", "RE", "RE", "RE", "XA", "XA", "XA"),
Flag = c("L", "L", "L", NA, "K", "J", NA, NA, "H", "G"),
Value = c(5929.81, 5929.81, 5929.81, NA, 6969.33, 740.08, NA, NA, 1524.8,
NA),
Flag2 = c("CL", "CL", "CL", NA, "RY", "", NA, NA, "", NA),
Flag3 = c(NA, NA, NA, NA, "RI", "PO", NA, "SS", "DDP", NA)),
.Names=c("ID", "Date", "Status", "Flag", "Value", "Flag2", "Flag3"),
row.names=c(NA, 10L), class="data.frame")
Sto usando il codice di seguito indicato:
df %>% mutate(L = ifelse(Flag == "L",1,0),
K = ifelse(Flag == "K",1,0),
# etc for Flag) %>%
mutate(sub_status = NA) %>%
mutate(sub_status = ifelse(!is.na(Flag2) & Flag3 == 0, "a", sub_status),
sub_status = ifelse(is.na(Flag2) & Flag3 != 0, "b", sub_status),
# etc for sub-status) %>%
mutate(value_class = ifelse(0 <= Value & Value <= 15000, "0-15000",
"15000-50000")) %>%
group_by(Date, status, sub_status, value_class) %>%
summarise(L = sum(L),
K = sum(K),
# etc
count = n())
Il che mi fornisce il seguente output:
Date Status sub_status value_class G H I J K L NA Count
2020-03-20 SA a 0-15000 0 0 0 0 1 1 0 2
2020-03-20 SA b 0-15000 0 0 0 0 1 0 0 1
................
................
Voglio ottenere il seguente output usando il DF, dove la Statuscolonna ha 3 valori distinti e Flag2ha valori o [null] o NA e infine la Flag3colonna ha 7 valori distinti con [null] o NA. Per un distinto IDabbiamo più voci di Flag3colonna.
Devo creare il seguente frame di dati, creando un gruppo 3 basato su Valuecome 0-15000, 15000-50000.
- Se per un ID distinto
Flag2ha un valore diverso da 0 o [null] / NA maFlag3ha valore 0 o [null] / NA, lo sarebbea. - Se per un ID distinto
Flag3ha un valore diverso da 0 o [null] / NA maFlag2ha valore 0 o [null] / NA, allora sarebbeb - Se per un ID distinto sia
Flag2eFlag3abbia un valore diverso da 0 o [Null] / NA, lo sarebbec - Se per un ID distinto sia
Flag2eFlag3abbia valore 0 o [Null] / NA lo sarebbed
Voglio disporre i suddetti frame di dati nella seguente struttura con percente Totalcolonna.
Ho citato la percentuale che mi piace 2/5mostrare che lo status sarebbe diviso per il totale mentre sub_statussarebbe diviso per i rispettivi Status.
16/03/2020 0 - 15000 15000 - 50000
Status count percent L K J H G [Null] count percent L K J H G [Null] Total
SA 1 1/8 (12.50%) 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1
a 1 1/1(100.00%) 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1
b 0 - 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0
c 0 - 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0
d 0 - 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0
RE 4 50.00% 0 1 1 0 0 2 0 - 0 0 0 0 0 0 4
a 0 - 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0
b 1 25.00% 0 0 1 0 0 1 0 - 0 0 0 0 0 0 1
c 1 25.00% 0 1 0 0 0 1 0 - 0 0 0 0 0 0 1
d 2 50.00% 0 0 0 0 0 2 0 - 0 0 0 0 0 0 2
XA 3 37.50% 0 0 0 1 1 1 0 - 0 0 0 0 0 0 3
a 0 - 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0
b 2 66.67% 0 0 0 1 0 1 0 - 0 0 0 0 0 0 2
c 0 - 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0
d 1 33.33% 0 0 0 0 1 0 0 - 0 0 0 0 0 0 1
Total 8 100.00% 1 1 0 0 1 3 0 - 0 0 0 0 0 0 8
Ho citato l'output richiesto in base alla data più recente, che è il 16/03/2020, se il frame di dati non ha la data più recente in base a startdatemantenere tutto il valore 0 nel frame di dati di output. La colonna percentuale è solo per riferimento ci saranno valori percentuali calcolati.
Inoltre, voglio mantenere la struttura statica. Ad esempio, se per uno qualsiasi dei parametri non fosse presente per un giorno, la struttura di output sarebbe la stessa con valore 0.
Ad esempio, supponiamo che la data 17/03/2020non abbia alcuna riga con stato SAo sub_status cil segnaposto che sarà presente nell'output con valore as 0.
dputset di dati che ti piace - è il terzo blocco di codice. Il codice precedente non sembra pertinente poiché sembri contento dell'output.
2/5solo a scopo di rappresentazione. Ci sarebbe un valore percentuale solo con 2 punti decimali con segno percentuale.