Функция ddply()
из пакета plyr
позволяет разбивать данные на переменные идентификатора, выполнять функцию для каждого блока, а затем собирать их все вместе. Таким образом, вам нужно разбить ваши данные по идентификатору и статусу A / B, посчитать, сколько раз встречается каждая из этих комбинаций (используя nrow()
), а затем аккуратно сложить эти значения.
Использование wkmor1's df
:
library(plyr)
x <- ddply(.data = df, .var = c("ID", "GRP"), .fun = nrow)
, который возвращает:
ID GRP V1
1 1 a 2
2 1 b 2
3 2 a 2
4 2 b 2
А затем объединить это с исходными данными:
merge(x, df, by = c("ID", "GRP"))