Ich habe einen unten genannten Datenrahmen:
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")
Ich verwende den unten genannten Code:
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())
Welches liefert mir die folgende Ausgabe:
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
................
................
Ich möchte die folgende Ausgabe mit dem erhalten DF
, wobei die Status
Spalte unterschiedliche 3 Werte hat und Flag2
entweder Werte oder [null] oder NA hat und die Flag3
Spalte schließlich unterschiedliche 7 Werte mit [null] oder NA hat. Für einen Unterschied haben ID
wir mehrere Flag3
Spalteneinträge.
Ich muss den folgenden Datenrahmen erstellen, indem ich eine 3-Gruppe basierend auf Value
0-15000, 15000-50000 erstelle.
- Wenn für eine eindeutige ID
Flag2
ein anderer Wert als 0 oder [null] / NA, aberFlag3
der Wert 0 oder [null] / NA vorliegt, ist dies der Falla
. - Wenn für eine eindeutige ID
Flag3
ein anderer Wert als 0 oder [null] / NA, aberFlag2
der Wert 0 oder [null] / NA vorliegt, ist dies der Fallb
- Wenn für eine eindeutige ID beide
Flag2
&Flag3
einen anderen Wert als 0 oder [Null] / NA haben, ist dies der Fallc
- Wenn für eine eindeutige ID beide
Flag2
&Flag3
den Wert 0 oder [Null] / NA haben, wäre dies der Falld
Ich möchte die oben genannten Datenframen in der folgenden Struktur mit percent
und Total
Spalte anordnen .
Ich habe den Prozentsatz erwähnt, der gerne 2/5
zeigt, dass der Status durch die Summe geteilt wird, während er sub_status
durch den jeweiligen geteilt wird 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
Ich habe die erforderliche Ausgabe basierend auf dem letzten Datum, dem 16.03.2020, erwähnt, wenn der Datenrahmen nicht das späteste Datum gemäß startdate
dem Wert 0 im Ausgabedatenrahmen hat. Die Prozentspalte dient nur als Referenz. Es werden Prozentwerte berechnet.
Außerdem möchte ich die Struktur statisch halten. Wenn beispielsweise für einen der Parameter für einen Tag kein Parameter vorhanden ist, ist die Ausgabestruktur mit dem Wert 0 identisch.
Angenommen, das Datum 17/03/2020
hat keine Zeile mit dem Status SA
oder sub_status. c
Der Platzhalter dafür befindet sich in der Ausgabe mit dem Wert als 0
.
dput
Datensatz beginnen, den Sie mögen - es ist der dritte Codeblock. Der vorherige Code erscheint nicht relevant, da Sie mit der Ausgabe zufrieden zu sein scheinen.
2/5
nur zu Darstellungszwecken behalten habe . Es würde nur einen Prozentwert mit 2 Dezimalstellen mit Prozentzeichen geben.