В R Я хочу выбрать максимальные временные точки при группировке? - PullRequest
0 голосов
/ 17 июня 2020

Я хочу выбрать минимум Timepoint, максимум Timepoint и продолжительность (разница между максимальным и минимальным), сгруппированные по Replicate, Stimulus, Attribute и Complexity

structure(list(Replicate = c(1L, 1L, 1L, 1L, 1L, 1L), Stimulus = c(1L, 
1L, 1L, 1L, 1L, 1L), Subject = c("S001", "S001", "S001", "S001", 
"S001", "S001"), Attribute = c("Soft", "Soft", "Soft", "Soft", 
"Soft", "Soft"), Timepoint = c(0.77, 0.78, 0.79, 0.8, 0.81, 0.82
), Dominant = c(1L, 1L, 1L, 1L, 1L, 1L), Complexity = c(2L, 2L, 
2L, 2L, 2L, 2L)), row.names = c(NA, 6L), class = "data.frame")  

Я использую следующий код

modified_tds_merged2<-tds_merged.df %>% 
  as.data.frame() %>% 
  mutate(Timepoint = as.numeric(gsub("[a-zA-Z]+", "", Timepoint))) %>% 
  group_by(Replicate, Stimulus, Subject, Attribute, Complexity) %>% 
  summarise(
    start_time = min(Timepoint), 
    end_time = max(Timepoint),
    duration = end_time - start_time,
    n = n()
  ) %>% 
  ungroup()

Однако результат неверен, время окончания часто неверно, так как они перекрываются, когда может быть только 1 Complexity рейтинг при любом timepoint, и кажется случайный. Вот пример результата. Вы можете видеть, что для S008, crumbly_particles, Complexity рейтинг 3 идет от 0.47 to 0.7 1, а Complexity рейтинг 4 идет от 0.51 to 0.66. Когда я снова проверяю tds_merged.df, Complexity рейтинг 3 должен быть от .47 to.50 и .67 to .71, а Complexity рейтинг 4 - от .51 to .66, что правильно. Похоже, что в моем коде не указано, что если рейтинг Complexity изменится с 3 на 4 и обратно на 3, то необходимо будет тщательно рассчитать два рейтинга 3.

structure(list(Replicate = c(1L, 1L, 1L, 1L, 1L, 1L), Stimulus = c(1L, 
1L, 1L, 1L, 1L, 1L), Subject = c("S001", "S004", "S004", "S008", 
"S008", "S008"), Attribute = c("Soft", "Crumbly_Particles", "Soft", 
"Crumbly_Particles", "Crumbly_Particles", "Crunchy"), Complexity = c(2L, 
2L, 2L, 3L, 4L, 2L), start_time = c(0.77, 0.95, 0.19, 0.47, 0.51, 
0.79), end_time = c(0.99, 0.99, 0.94, 0.71, 0.66, 0.82), duration = c(0.22, 
0.04, 0.75, 0.24, 0.15, 0.0299999999999999), n = c(23L, 5L, 76L, 
9L, 16L, 4L)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", 
"data.frame"))

Простите за долгое время " вопрос"!! Надеюсь, кто-то может помочь. Может быть, проблема в использовании max и min, есть ли еще одна функция, я новичок в R?

Ответы [ 2 ]

0 голосов
/ 25 июня 2020

Как было предложено выше, я использовал функцию rleid, чтобы создать новую переменную идентификатора группы, чтобы учесть ситуацию в моем вопросе.

0 голосов
/ 17 июня 2020

«Похоже, в моем коде это не указано, если рейтинг сложности изменится». Верный. group_by сортирует ваши данные (явно или неявно не всегда понятно, но это уже другая история). Итак, ваше решение состоит в том, чтобы ввести другую переменную, например RunID, которая изменяется каждый раз, когда Complexity изменяется в пределах Replicate, Stimulus, Subject и Attribute.

...