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 StatusSpalte unterschiedliche 3 Werte hat und Flag2entweder Werte oder [null] oder NA hat und die Flag3Spalte schließlich unterschiedliche 7 Werte mit [null] oder NA hat. Für einen Unterschied haben IDwir mehrere Flag3Spalteneinträge.
Ich muss den folgenden Datenrahmen erstellen, indem ich eine 3-Gruppe basierend auf Value0-15000, 15000-50000 erstelle.
- Wenn für eine eindeutige ID
Flag2ein anderer Wert als 0 oder [null] / NA, aberFlag3der Wert 0 oder [null] / NA vorliegt, ist dies der Falla. - Wenn für eine eindeutige ID
Flag3ein anderer Wert als 0 oder [null] / NA, aberFlag2der Wert 0 oder [null] / NA vorliegt, ist dies der Fallb - Wenn für eine eindeutige ID beide
Flag2&Flag3einen anderen Wert als 0 oder [Null] / NA haben, ist dies der Fallc - Wenn für eine eindeutige ID beide
Flag2&Flag3den Wert 0 oder [Null] / NA haben, wäre dies der Falld
Ich möchte die oben genannten Datenframen in der folgenden Struktur mit percentund TotalSpalte anordnen .
Ich habe den Prozentsatz erwähnt, der gerne 2/5zeigt, dass der Status durch die Summe geteilt wird, während er sub_statusdurch 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äß startdatedem 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/2020hat keine Zeile mit dem Status SAoder sub_status. cDer Platzhalter dafür befindet sich in der Ausgabe mit dem Wert als 0.
dputDatensatz 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/5nur zu Darstellungszwecken behalten habe . Es würde nur einen Prozentwert mit 2 Dezimalstellen mit Prozentzeichen geben.