Представьте, что у вас есть следующая таблица с именем DT
ID Path Status
AA XXX Completed
AB XXX Completed
AC XXX In progress
AD XYY Completed
AE XYY In progress
Я хочу сгруппировать эту таблицу по пути и подсчитать (1) количество уникальных идентификаторов и (2) количество уникальных идентификаторов со статусом «Завершено» (в исходной таблице DT нет повторяющихся идентификаторов)
Я попробовал следующий код:
DT_Grouped <- DT %>%
group_by(Path) %>%
summarise(CountComplete = sum(DT$Status == "Completed"), Count=n())
Это дает следующий результат:
Path CountComplete Count
XXX 3 3
XYY 3 2
CountComplete всегда дает общее количество уникальных идентификаторов со статусом завершено; не сгруппированы по пути. Что логично, поскольку расчет относится к исходной таблице, а не к сгруппированному набору данных.
Как мне адаптировать код, чтобы CountComplete группировался по пути?
Заранее спасибо за помощь.
Причина в том, что мы получаем полный столбец набора данных с DT$
вместо значений «Статус» в каждой группе.
sum(DT$Status == "Completed")
^^^^
так должно быть
library(dplyr)
DT_Grouped <- DT %>%
group_by(Path) %>%
summarise(CountComplete = sum(Status == "Completed"), Count=n())
DT_Grouped
# A tibble: 2 x 3
# Path CountComplete Count
# <chr> <int> <int>
#1 XXX 2 3
#2 XYY 1 2
Если это data.table
, соответствующий метод будет
library(data.table)
setDT(DT)[, .(CountComplete = sum(Status == "Completed"), Count = .N), by = Path]
DT <- structure(list(ID = c("AA", "AB", "AC", "AD", "AE"), Path = c("XXX",
"XXX", "XXX", "XYY", "XYY"), Status = c("Completed", "Completed",
"In progress", "Completed", "In progress")),
class = "data.frame", row.names = c(NA,
-5L))