J'ai une trame de données ci-dessous:
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")
J'utilise le code mentionné ci-dessous:
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())
Ce qui me donne la sortie suivante:
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
................
................
Je veux obtenir la sortie suivante en utilisant le DF, où la Statuscolonne a 3 valeurs distinctes et Flag2a soit des valeurs ou [null] ou NA et enfin la Flag3colonne a 7 valeurs distinctes avec [null] ou NA. Pour un distinct, IDnous avons plusieurs entrées de Flag3colonne.
J'ai besoin de créer le cadre de données suivant, en créant un groupe de 3 basé sur Valuecomme 0-15000, 15000-50000.
- Si pour un ID distinct
Flag2a une valeur autre que 0 ou [null] / NA maisFlag3a une valeur 0 ou [null] / NA alors ce seraita. - Si pour un ID distinct
Flag3a une valeur autre que 0 ou [null] / NA maisFlag2a la valeur 0 ou [null] / NA alors ce seraitb - Si pour un ID distinct à la fois
Flag2&Flag3a une valeur autre que 0 ou [Null] / NA, alors ce seraitc - Si pour un ID distinct à la fois
Flag2&Flag3a la valeur 0 ou [Null] / NA, ce seraitd
Je souhaite organiser les données mentionnées ci-dessus dans la structure suivante avec percentet Totalcolonne.
J'ai mentionné le pourcentage comme 2/5pour montrer que le statut serait divisé par le total alors sub_statusqu'il serait divisé par leurs respectifs 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
J'ai mentionné la sortie requise en fonction de la dernière date qui est le 16/03/2020, si la trame de données n'a pas la dernière date selon startdateconserver toute la valeur 0 dans la trame de données de sortie. La colonne de pourcentage est juste pour la référence, il y aura des valeurs de pourcentage calculées ,.
Aussi, je veux garder la structure statique. Par exemple, si pour l'un des paramètres ne sont pas présents pendant un jour, la structure de sortie serait la même avec la valeur 0.
Par exemple, supposons que la date 17/03/2020ne contienne aucune ligne avec status SAou sub_status cpour lequel le paramètre de substitution sera présent dans la sortie avec la valeur as 0.
dputjeu de données que vous aimez - c'est le troisième bloc de code. Le code précédent ne semble pas pertinent car vous semblez satisfait de la sortie.
2/5juste à des fins de représentation. Il y aurait une valeur en pourcentage uniquement avec 2 décimales avec signe de pourcentage.