Как посчитать последовательность для каждой группы?

#r

Вопрос:

У меня есть база данных с тремя столбцами (MAT, ДАННЫЕ и СТАТУС), я хотел бы посчитать последовательность состояний для различных MAT.

Мой набор данных

 MAT. DATA STATUS 1 4857 2021-09-21 FO 2 4857 2021-09-22 FO 3 4857 2021-09-23 FO 4 4857 2021-09-24 FO 5 4857 2021-09-25 FO 6 4857 2021-09-26 FO 7 4857 2021-09-27 T 8 4857 2021-09-28 C 9 4857 2021-09-29 C  

Пример: Для МАТ. = 5109 у меня есть следующая последовательность

 MAT. DATA STATUS 955 5109 2021-09-21 C 956 5109 2021-09-22 C 957 5109 2021-09-23 C 958 5109 2021-09-24 C 959 5109 2021-09-25 C 960 5109 2021-09-26 C 961 5109 2021-09-27 C 962 5109 2021-09-28 C 963 5109 2021-09-29 C 964 5109 2021-09-30 C 965 5109 2021-10-01 C 966 5109 2021-10-02 C 967 5109 2021-10-03 C 968 5109 2021-10-04 C 969 5109 2021-10-05 C 970 5109 2021-10-06 C 971 5109 2021-10-07 C 972 5109 2021-10-08 T 973 5109 2021-10-09 FO 974 5109 2021-10-10 FO 975 5109 2021-10-11 FO 976 5109 2021-10-12 FO 977 5109 2021-10-13 FO 978 5109 2021-10-14 FO 979 5109 2021-10-15 FO 980 5109 2021-10-16 FO 981 5109 2021-10-17 FO 982 5109 2021-10-18 T 983 5109 2021-10-19 C 984 5109 2021-10-20 C  

введите описание изображения здесь

Я использовал rle функцию, которая сгенерировала счетчик:

 gt; rle(df_exemplo$STATUS) Run Length Encoding  lengths: int [1:5] 17 1 9 1 2  values : chr [1:5] "C" "T" "FO" "T" "C"  

Теперь мне нужно сделать это для всех остальных ковриков. и эти данные хранятся во фрейме данных.

У кого-нибудь есть идеи, как я могу это сделать?

Весь Набор Данных

 df_group_MAT =  structure(list(MAT. = c(4885L, 4885L, 4885L, 4885L, 4885L, 4885L,   4885L, 4885L, 4885L, 4885L, 4885L, 4885L, 4885L, 4885L, 4885L,   4885L, 4885L, 4885L, 4885L, 4885L, 4885L, 4885L, 4885L, 4885L,   4885L, 4885L, 4885L, 4885L, 4885L, 4885L, 4885L, 5109L, 5109L,   5109L, 5109L, 5109L, 5109L, 5109L, 5693L, 5693L, 5693L, 5693L,   5693L, 5693L, 5693L, 5693L, 5693L, 5693L, 5693L, 5693L, 5693L,   5693L, 5693L, 5693L, 5693L, 5693L, 5693L, 5693L, 5693L, 5693L,   5693L, 5693L, 5693L, 5693L, 5693L, 5693L, 5693L, 5693L, 5693L,   5986L, 5986L, 5986L, 5986L, 5986L, 5986L, 5986L, 5986L, 5986L,   5986L, 5986L, 5986L, 5986L, 5986L, 5986L, 5986L, 5986L, 5986L,   5986L, 5986L, 5986L, 5986L, 5986L, 5986L, 5986L, 5986L, 5986L,   5986L, 5986L, 5986L, 5986L), DATA = structure(c(18892, 18896,   18900, 18904, 18908, 18912, 18916, 18920, 18924, 18928, 18932,   18936, 18940, 18944, 18948, 18952, 18956, 18960, 18964, 18968,   18972, 18976, 18980, 18984, 18988, 18992, 18996, 19000, 19004,   19008, 19012, 18893, 18897, 18901, 18905, 18909, 18913, 18917,   18891, 18895, 18899, 18903, 18907, 18911, 18915, 18919, 18923,   18927, 18931, 18935, 18939, 18943, 18947, 18951, 18955, 18959,   18963, 18967, 18971, 18975, 18979, 18983, 18987, 18991, 18995,   18999, 19003, 19007, 19011, 18892, 18896, 18900, 18904, 18908,   18912, 18916, 18920, 18924, 18928, 18932, 18936, 18940, 18944,   18948, 18952, 18956, 18960, 18964, 18968, 18972, 18976, 18980,   18984, 18988, 18992, 18996, 19000, 19004, 19008, 19012), class = "Date"),   STATUS = c("FO", "FO", "ANG", "ANG", "ANG", "ANG", "FO",   "FO", "FO", "C", "C", "C", "C", "C", "EC", "EC", "EC", "FO",   "FO", "FO", "C", "C", "C", "C", "FO", "FO", "FO", "C", "C",   "C", "C", "C", "C", "C", "C", "FO", "FO", "FO", "C", "FO",   "FO", "FO", "FO", "C", "C", "C", "C", "FO", "FO", "FO", "FO",   "C", "AT", "C", "C", "C", "FO", "FO", "FO", "FO", "FO", "C",   "C", "C", "C", "T", "FO", "FO", "FO", "C", "C", "C", "C",   "T", "FO", "FO", "QR", "QR", "QR", "AG", "AG", "AG", "AG",   "AG", "AG", "AG", "AG", "AG", "AG", "AG", "AG", "AG", "AG",   "AG", "AG", "AG", "AG", "AG", "AG", "AG")), row.names = c(560L,   564L, 568L, 572L, 576L, 580L, 584L, 588L, 592L, 596L, 600L, 604L,   608L, 612L, 616L, 620L, 624L, 628L, 632L, 636L, 640L, 644L, 648L,   652L, 656L, 660L, 664L, 668L, 672L, 676L, 680L, 957L, 961L, 965L,   969L, 973L, 977L, 981L, 1842L, 1846L, 1850L, 1854L, 1858L, 1862L,   1866L, 1870L, 1874L, 1878L, 1882L, 1886L, 1890L, 1894L, 1898L,   1902L, 1906L, 1910L, 1914L, 1918L, 1922L, 1926L, 1930L, 1934L,   1938L, 1942L, 1946L, 1950L, 1954L, 1958L, 1962L, 2827L, 2831L,   2835L, 2839L, 2843L, 2847L, 2851L, 2855L, 2859L, 2863L, 2867L,   2871L, 2875L, 2879L, 2883L, 2887L, 2891L, 2895L, 2899L, 2903L,   2907L, 2911L, 2915L, 2919L, 2923L, 2927L, 2931L, 2935L, 2939L,   2943L, 2947L), class = "data.frame")  

Ответ №1:

Вы можете использовать это :

 my_df2 lt;- df_group_MAT %gt;% group_by(MAT., STATUS) %gt;% summarise(Number = n())  

Дает ли это вам ожидаемый результат ?

Комментарии:

1. Спасибо за ответ, но таким образом все одинаковые строки группируются в одну, мне нужно, чтобы эти строки были разделены.

2. Вы имеете в виду, разделенные значением, содержащимся в ДАННЫХ ? или что-то еще ?