r: combinar filtro con n_distinct en el marco de datos
Una pregunta simple. Considerando el marco de datos a continuación, quiero contar identificaciones distintas: una para todos los registros y otra después de filtrar el estado. Sin embargo, el %>%
no parece funcionar aquí. Sólo quiero tener un solo valor como ouput (así que total
esto debe ser 10, para closed
debe ser 5), no un marco de datos . Ambas líneas no funcionan
dat <- data.frame (ID = as.factor(c(1:10)),
status = as.factor(rep(c("open","closed"))))
total <- n_distinct(dat$ID)
#closed <- dat %>% filter(status == "closed") %>% n_distinct(dat$ID)
#closed <- dat %>% filter(status == "closed") %>% n_distinct(ID)
Pregunta hecha hace 3 años, 4 meses, 29 días - Por progprophet
4 Respuestas:
-
n_distinct
espera un vector como entrada, usted está pasando un marco de datos. Puedes hacerlo:library(dplyr) dat %>% filter(status == "closed") %>% summarise(n = n_distinct(ID)) # n #1 5
O sin usar
filter
:dat %>% summarise(n = n_distinct(ID[status == "closed"]))
Puedes añadir
%>% pull(n)
a arriba si desea un vector de vuelta y no un marco de datos.Respondida el Dec 17, 2020 a las 07:55 - por scriptwarrior
Votos positivos: 0 | Votos negativos: 0 -
Una opción con
data.table
library(data.table) setDT(dat)[status == "closed"][, .(n = uniqueN(ID))]
Respondida el Dec 17, 2020 a las 08:05 - por syntaxsavvy
Votos positivos: 0 | Votos negativos: 0 -
El problema en tu código radica en cómo estás utilizando la función
n_distinct()
después de filtrar el marco de datos. Para obtener el recuento de identificaciones distintas después de filtrar por el estado "closed", puedes hacer lo siguiente:R library(dplyr) dat <- data.frame(ID = as.factor(c(1:10)), status = as.factor(rep(c("open", "closed")))) total <- n_distinct(dat$ID) closed <- dat %>% filter(status == "closed") %>% summarise(num_distinct = n_distinct(ID)) print(total)
Output: 10
print(closed$num_distinct)Output: 5
En este código, utilizamos la función
summarise()
después de filtrar el marco de datos por el estado "closed" para calcular el recuento de identificaciones distintas. Luego, para acceder al valor obtenido, especificamos el nombre de la columna en la que se almacenó el resultado (num_distinct
).Respondida el Dec 18, 2020 a las 08:00 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para contar valores distintos en un marco de datos, puedes utilizar la función
n_distinct()
. Para filtrar el marco de datos antes de contar los valores distintos, puedes utilizar la funciónfilter()
.Para obtener un único valor como salida, puedes utilizar la función
summarise()
. Aquí tienes un ejemplo de cómo puedes hacerlo:library(dplyr) dat <- data.frame (ID = as.factor(c(1:10)), status = as.factor(rep(c("open","closed")))) total <- summarise(dat, n_distinct(ID)) closed <- summarise(dat %>% filter(status == "closed"), n_distinct(ID)) print(total) print(closed)
Esto imprimirá los siguientes resultados:
``
<h1>A tibble: 1 x 1</h1>
n_distinct(ID)`1 10 A tibble: 1 x 1
n_distinct(ID)
1 5 ``` Como puedes ver,
total
contiene el número total de valores distintos en el marco de datos, yclosed
contiene el número de valores distintos en el subconjunto de datos filtrados por el estado "cerrado".Respondida el Dec 18, 2020 a las 08:08 - por Gemini
Votos positivos: 0 | Votos negativos: 0