2016-10-19 5 views
0

У меня есть набор данных, который выглядит как этотг значения dplyr group_by коллапс и вставить

Id Subject Date  Vitals  Value 
10 John  2001-05-29 HeartRate 65 
10 John  2001-05-29 HeartRate 68 
10 John  2001-05-29 BP-Arterial 48 
10 John  2001-05-29 PulseRate 64 
34 Pete  2005-08-15 HeartRate 68 
34 Pete  2005-08-15 BP-Arterial 56 
10 John  2004-09-25 HeartRate 65 
10 John  2004-09-25 BP-Arterial 64 
10 John  2004-09-25 PulseRate 63 
34 Pete  2007-07-21 BP-Arterial 68 
34 Pete  2007-07-21 PulseRate 56 

Я хочу сделать две вещи,

1) группу по Vitals. 2) Подсчитайте количество Vitals, которые были измерены для каждого идентификатора в определенную дату (ID + Date), и уменьшите и вставьте эти значения, как показано ниже.

Vitals  Series 
HeartRate 2,1,1 
BP-Arterial 1,1,1,1 
PulseRate 1,1,1 

Значение в столбце серии для HeartRate является 2, 1, 1, потому что HeartRate измеряли

дважды для ID 10 на 2001-05-29,

один раз для ID 34 на 2005-08-15 и

один раз для ID 10 на 2004-09-24

Не знает, как свернуть и вставить эти значения с помощью dplyr помощи является MUC ч оценили.

ответ

5

Подсчитайте количество Vitals, которые были измерены для каждого идентификатора на определенную дату (ID + Дата)

Это означает, что вам нужно сгруппировать по всем трем. Затем мы можем перегруппировать лишь на жизненно важные органы для окончательного распада:

dat %>% group_by(Vitals, Id, Date) %>% 
    summarize(n = n()) %>% 
    ungroup() %>% 
    group_by(Vitals) %>% 
    summarize(Series = paste(n, collapse = ',')) 
# # A tibble: 3 × 2 
#  Vitals Series 
#  <fctr> <chr> 
# 1 BP-Arterial 1,1,1,1 
# 2 HeartRate 2,1,1 
# 3 PulseRate 1,1,1 
+0

это просто идеально. Спасибо – bison2178

0

С dplyr и rle т.е. выполнения кодирования длины см ?rle для более подробной информации

library(dplyr) 

newDF = DF %>% 
    group_by(Id,Date) %>% 
    do(.,data.frame(Series=paste(rle(.$Vitals)$lengths,collapse=","),stringsAsFactors=FALSE)) %>% 
    as.data.frame() 

newDF 
# Id  Date Series 
#1 10 2001-05-29 2,1,1 
#2 10 2004-09-25 1,1,1 
#3 34 2005-08-15 1,1 
#4 34 2007-07-21 1,1 
+0

@Ossan, я ожидал, что серия создана для Vitals вместо ID – bison2178

Смежные вопросы