r中dplyr的group_by、values、collapse和paste是什么意思?

5
我有一个数据集,看起来像这样。
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. 计算每个ID在特定日期(ID + Date)下测量的Vitals数量,并将这些值折叠并粘贴如下。

    Vitals Series 心率 2,1,1 动脉血压 1,1,1,1 脉搏 1,1,1

在Series列下的HeartRate的值是2, 1, 1,因为对于2001-05-29,ID为10的人测量了两次心率;对于2005-08-15,ID为34的人测量了一次心率;对于2004-09-24,ID为10的人测量了一次心率。

不确定如何使用dplyr来折叠和粘贴这些值,任何帮助都将不胜感激。

2个回答

15

计算特定日期(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

使用 dplyrrle,即运行长度编码,请参见?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

@Ossan,我期望的是为Vitals创建的系列,而不是ID。 - bison2178

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接