2016-10-19 9 views
0

私は二つのことをしたい、このR 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)グループを持っています。 2)特定の日付の各IDについて測定されたバイタルの数を数えて(ID + Date)とし、以下のようにこれらの値を崩壊して貼り付けます。

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

心拍数が2001年5月29日にID 10に対する二回

を測定したので、HeartRate用シリーズ列の値が2, 1, 1である、2005年8月15日にID 34回

そして

崩壊し、任意の助けをdplyr使用してこれらの値を貼り付ける方法がわからないが、MUCである2004年9月24日に一度ID 10用

よろしくお願いいたします。

答えて

5

特定の日付(ID +日付)上の各IDを測定したバイタルの数をカウント

これは、あなたがすべての3つによりグループする必要があるということです。私たちは、最終的な崩壊のためにのみバイタルで再編成することができます:すなわちdplyrrle

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

これは単に完璧であるため?rleを参照してください。ありがとう – bison2178

0

ランレングスエンコーディングを詳細

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

@オッサン、私はIDの代わりにVitals用に作成されたシリーズを期待していた – bison2178

関連する問題