R - построить уникальные группы на основе последовательных строк и уровня фактора - PullRequest
1 голос
/ 21 апреля 2020

В общем, как бы я группировал на основе идентичных факторов, если они поступают из последовательных строк в кадре данных? Например, я хотел бы получить желаемое good_output ниже от test.

test <- data.frame(time = 1:10, letter = c("a","a","a","b","a","a","a","b","b","b"))
bad_output <- test %>% group_by(letter) %>% summarize(mean_time = mean(time))
bad_output
# A tibble: 2 x 2
  letter mean_time
  <fct>      <dbl>
1 a           4   
2 b           7.75

good_output <- data.frame(letter=c("a","b","a","b"), id=c(1,1,2,2), mean_time=c(2,4,6,9))
good_output
  letter id mean_time
1      a  1         2
2      b  1         4
3      a  2         6
4      b  2         9

1 Ответ

1 голос
/ 21 апреля 2020

Мы можем сделать группу по 'букве' и идентификатору длины серии (rleid из data.table) по 'букве', summarise, чтобы получить mean из 'времени', создать столбец последовательности с row_number() и выберите столбец «grp»

library(dplyr)
library(data.table)
test %>% 
    group_by(letter, grp = rleid(letter))  %>%
    summarise(mean_time = mean(time)) %>%       
    mutate(id = row_number()) %>%
    ungroup %>%
    select(-grp)
# A tibble: 4 x 3
#  letter mean_time    id
#  <fct>      <dbl> <int>
#1 a              2     1
#2 a              6     2
#3 b              4     1
#4 b              9     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...