Мне нужно определить последовательность по группам в data.frame и вычислить новую переменную.
Считайте, что у меня есть следующее data.frame
:
df1 <- data.frame(ID = c(1,1,1,1,1,1,1,2,2,2,3,3,3,3),
seqs = c(1,2,3,4,5,6,7,1,2,3,1,2,3,4),
count = c(2,1,3,1,1,2,3,1,2,1,3,1,4,1),
product = c("A", "B", "C", "C", "A,B", "A,B,C", "D", "A", "B", "A", "A", "A,B,C", "D", "D"),
stock = c("A", "A,B", "A,B,C", "A,B,C", "A,B,C", "A,B,C", "A,B,C,D", "A", "A,B", "A,B", "A", "A,B,C", "A,B,C,D", "A,B,C,D"))
df1
> df1
ID seqs count product stock
1 1 1 2 A A
2 1 2 1 B A,B
3 1 3 3 C A,B,C
4 1 4 1 C A,B,C
5 1 5 1 A,B A,B,C
6 1 6 2 A,B,C A,B,C
7 1 7 3 D A,B,C,D
8 2 1 1 A A
9 2 2 2 B A,B
10 2 3 1 A A,B
11 3 1 3 A A
12 3 2 1 A,B,C A,B,C
13 3 3 4 D A,B,C,D
14 3 4 1 D A,B,C,D
Мне интересно вычислить меру для ID
, которая следует за этой последовательностью:
- Count == 1
- Count > 1
- Count == 1
В примере это верно для:
- rows 2, 3, 4 for `ID==1`
- rows 8, 9, 10 for `ID==2`
- rows 12, 13, 14 for `ID==3`
Для этих идентификаторов и строк мне нужно вычислить меру с именем new
, которая принимает значение product
последней строки последовательности if
она находится во второй строке последовательности, а НЕ в stock
первой последовательности.
Желаемый результат показан ниже:
> output
ID seq1 seq2 seq3 new
1 1 2 3 4 C
2 2 1 2 3
3 3 2 3 4 D
Примечание:
- В последовательности, определенной для идентификатора, на склад не добавляются новые товары.
- В исходных данных много идентификаторов, у которых нет последовательностей.
- Некоторые
ID
имеют несколько уточняющих последовательностей. Все должно быть записано.
- Количество всегда 1 или больше.
- Исходные данные содержат миллионы
ID
с 1500 последовательностями.
Как бы вы написали эффективный кусок кода, чтобы получить этот вывод?