У меня есть кадр данных, который выглядит следующим образом:Вычисление функции смежных состояний с dplyr без использования group_by?
States <- data.frame(State = c('a','a','b','c','c','a','b'),Duration = c(2,3,5,4,7,2,1))
Я хочу найти продолжительность этой системы проводит в каждом посещении государства. То есть, я хочу
State Duration
a 5
b 5
c 11
a 2
b 1
Быстрый ответ использует group_by, но это неправильно;
States %>% group_by(State) %>% summarise(Total = sum(Duration))
дает
State Total
(fctr) (dbl)
1 a 7
2 b 6
3 c 11
Как бы вы сделать это?
Спасибо,
Билл
Вот более простой вариант, который может быть ближе к сути моей проблемы.
States <- data.frame(State = c('a','a','a','b','c','c','b','a','b','d'),Duration = c(0,2,2,3,0,5,4,7,2,1))
States
State Duration
1 a 0
2 a 2
3 a 2
4 b 3
5 c 0
6 c 5
7 b 4
8 a 7
9 b 2
10 d 1
Я хочу подвести итог продолжительности, проведенной в смежных посещениях штатов. В этом случае, это
Другими словами, вы берете на себя последний срок для каждого государственного визита, а первая длительность 0, если есть более чем одна запись для этого визита (я не дизайн данных , Я просто работаю с ним).
Если я использую group_by, как указано выше, dplyr запускает кадр данных по состоянию, и это дает мне неправильный ответ: одна запись для каждого состояния, а не одна запись за посещение.
Помогло ли это? Я думаю, что они оба связаны между собой: есть ли способ объединить строки, не переставляя их?
@DatamineR ах - я прочитал его как второй фрагмент кода - желаемый результат, третий кусок - это то, что он пытался, а четвертый фрагмент кода - результат его неправильной попытки. – tospig
Чтобы уточнить, первый кодовый блок создает входные данные. Второй показывает, что я хочу. Третий показывает неправильный код с помощью group_by, а четвертый показывает результат неправильного кода. Я ищу код, который производит второй блок кода. @tospig, вы правы. – Bill