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 Statuscolumna tiene 3 valores distintos y Flag2tiene valores o [nulo] o NA y finalmente la Flag3columna tiene 7 valores distintos con [nulo] o NA. Para un distinto IDtenemos entrada múltiple de Flag3columna.
Necesito crear el siguiente marco de datos, creando un grupo 3 basado en Valuecomo 0-15000, 15000-50000.
- Si para una ID distinta
Flag2tiene algún valor distinto de 0 o [nulo] / NA peroFlag3tiene valor 0 o [nulo] / NA, entonces seríaa. - Si para una ID distinta
Flag3tiene algún valor distinto de 0 o [nulo] / NA peroFlag2tiene valor 0 o [nulo] / NA, entonces seríab - Si para una ID distinta tanto
Flag2&Flag3tiene algún valor distinto de 0 o [Nulo] / NA, entonces seríac - Si para un ID distinto tanto
Flag2&Flag3tiene valor 0 o [Nulo] / NA, seríad
Quiero organizar el datafrmae mencionado anteriormente en la siguiente estructura con percentyTotal columna.
He mencionado que el porcentaje 2/5muestra que el estado se dividiría por el Total, mientras sub_statusque 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/2020no tiene ninguna fila con status SAo sub_status, cel marcador de posición que estará allí en la salida con el valor as 0.

2/5solo para el propósito de representación. Habría un valor porcentual solo con 2 puntos decimales con signo de porcentaje.dputconjunto 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.Respuestas:
Con suerte, eso será suficiente para comenzar, para ir más lejos, necesitaré una salida esperada que parezca que proviene de R, y más explicaciones sobre cómo se calculan las variables.
fuente