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 Status
colonne a 3 valeurs distinctes et Flag2
a soit des valeurs ou [null] ou NA et enfin la Flag3
colonne a 7 valeurs distinctes avec [null] ou NA. Pour un distinct, ID
nous avons plusieurs entrées de Flag3
colonne.
J'ai besoin de créer le cadre de données suivant, en créant un groupe de 3 basé sur Value
comme 0-15000, 15000-50000.
- Si pour un ID distinct
Flag2
a une valeur autre que 0 ou [null] / NA maisFlag3
a une valeur 0 ou [null] / NA alors ce seraita
. - Si pour un ID distinct
Flag3
a une valeur autre que 0 ou [null] / NA maisFlag2
a la valeur 0 ou [null] / NA alors ce seraitb
- Si pour un ID distinct à la fois
Flag2
&Flag3
a une valeur autre que 0 ou [Null] / NA, alors ce seraitc
- Si pour un ID distinct à la fois
Flag2
&Flag3
a la valeur 0 ou [Null] / NA, ce seraitd
Je souhaite organiser les données mentionnées ci-dessus dans la structure suivante avec percent
et Total
colonne.
J'ai mentionné le pourcentage comme 2/5
pour montrer que le statut serait divisé par le total alors sub_status
qu'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 startdate
conserver 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/2020
ne contienne aucune ligne avec status SA
ou sub_status c
pour lequel le paramètre de substitution sera présent dans la sortie avec la valeur as 0
.
2/5
juste à des fins de représentation. Il y aurait une valeur en pourcentage uniquement avec 2 décimales avec signe de pourcentage.dput
jeu 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.Réponses:
J'espère que cela suffira pour vous aider à démarrer, pour aller plus loin, j'aurai besoin d'une sortie attendue qui semble provenir de R, et de plus d'explications sur la façon dont les variables sont calculées.
la source