Tengo un marco de datos mencionado a continuación:
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")
Estoy usando el código mencionado a continuación:
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())
Lo que me proporciona el siguiente resultado:
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
................
................
Quiero obtener el siguiente resultado utilizando DF
, donde la Status
columna tiene 3 valores distintos y Flag2
tiene valores o [nulo] o NA y finalmente la Flag3
columna tiene 7 valores distintos con [nulo] o NA. Para un distinto ID
tenemos entrada múltiple de Flag3
columna.
Necesito crear el siguiente marco de datos, creando un grupo 3 basado en Value
como 0-15000, 15000-50000.
- Si para una ID distinta
Flag2
tiene algún valor distinto de 0 o [nulo] / NA peroFlag3
tiene valor 0 o [nulo] / NA, entonces seríaa
. - Si para una ID distinta
Flag3
tiene algún valor distinto de 0 o [nulo] / NA peroFlag2
tiene valor 0 o [nulo] / NA, entonces seríab
- Si para una ID distinta tanto
Flag2
&Flag3
tiene algún valor distinto de 0 o [Nulo] / NA, entonces seríac
- Si para un ID distinto tanto
Flag2
&Flag3
tiene valor 0 o [Nulo] / NA, seríad
Quiero organizar el datafrmae mencionado anteriormente en la siguiente estructura con percent
yTotal
columna.
He mencionado que el porcentaje 2/5
muestra que el estado se dividiría por el Total, mientras sub_status
que se dividiría por sus respectivos 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
He mencionado la salida requerida basada en la última fecha que es 16/03/2020, si el marco de datos no tiene la última fecha según startdate
mantener todo el valor 0 en el marco de datos de salida. La columna de porcentaje es solo para la referencia, habrá valores de porcentaje calculados.
Además, quiero mantener la estructura estática. Por ejemplo, si alguno de los parámetros no está presente durante un día, la estructura de salida sería la misma con el valor 0.
Por ejemplo, supongamos que date 17/03/2020
no tiene ninguna fila con status SA
o sub_status, c
el marcador de posición que estará allí en la salida con el valor as 0
.
dput
conjunto de datos que le gusta? Es el tercer bloque de código. El código anterior no parece relevante ya que parece contento con la salida.
2/5
solo para el propósito de representación. Habría un valor porcentual solo con 2 puntos decimales con signo de porcentaje.