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 Status
colonna ha 3 valori distinti e Flag2
ha valori o [null] o NA e infine la Flag3
colonna ha 7 valori distinti con [null] o NA. Per un distinto ID
abbiamo più voci di Flag3
colonna.
Devo creare il seguente frame di dati, creando un gruppo 3 basato su Value
come 0-15000, 15000-50000.
- Se per un ID distinto
Flag2
ha un valore diverso da 0 o [null] / NA maFlag3
ha valore 0 o [null] / NA, lo sarebbea
. - Se per un ID distinto
Flag3
ha un valore diverso da 0 o [null] / NA maFlag2
ha valore 0 o [null] / NA, allora sarebbeb
- Se per un ID distinto sia
Flag2
eFlag3
abbia un valore diverso da 0 o [Null] / NA, lo sarebbec
- Se per un ID distinto sia
Flag2
eFlag3
abbia valore 0 o [Null] / NA lo sarebbed
Voglio disporre i suddetti frame di dati nella seguente struttura con percent
e Total
colonna.
Ho citato la percentuale che mi piace 2/5
mostrare che lo status sarebbe diviso per il totale mentre sub_status
sarebbe 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 startdate
mantenere 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/2020
non abbia alcuna riga con stato SA
o sub_status c
il segnaposto che sarà presente nell'output con valore as 0
.
dput
set di dati che ti piace - è il terzo blocco di codice. Il codice precedente non sembra pertinente poiché sembri contento dell'output.
2/5
solo a scopo di rappresentazione. Ci sarebbe un valore percentuale solo con 2 punti decimali con segno percentuale.