在dplyr中使用嵌套的group_by

时间:2015-12-08 20:34:11

标签: r dplyr

鉴于以下玩具示例:

set.seed(200)
h<-data.frame(T1=sample(0:100,size = 20),ID=sample(c("A","B","C","D"),size=20,replace=T),yr=sample(c(2006:2010),size = 20,replace=T))

我怎么能

  • 计算每年超过1个实例的ID的比例
  • 创建一个变量,该变量针对每个ID和年份的每个升序值T1递增
  • 从T1(1)减去每个实例T1(2),从T1(2)减去每个ID的T1(3)

我想出了第一个:

h %>% group_by(yr,ID) %>% summarise(n=n()) %>% summarise(n2=sum(n>1),n3=n(),n4=n2/n3)

现在,到最后两个问题 - 这是所需的输出:

 T1 ID   yr      Inc.var   diff
1  92  A 2006        1       6
2  98  A 2006        2       0
3  41  B 2006        1       0 
4  26  C 2006        1       71
5  97  C 2006        2       0
6  11  D 2006        1       56
7  67  D 2006        2       0
8   9  B 2008        1       44
9  53  B 2008        2       4
10 57  B 2008        3       19
11 76  B 2008        4       0
12 33  D 2008        etc    etc
13 48  A 2009
14 58  A 2009
15 99  A 2009
16 52  B 2009
17 80  B 2009
18 13  B 2010
19 64  B 2010
20 21  C 2010

1 个答案:

答案 0 :(得分:2)

以下是我解决最后两个问题的方法:

j <- h %>% group_by(ID,yr) %>% arrange(T1) %>% mutate(diff=lead(T1)-T1,inc.var=seq(length(T1))) %>% arrange(yr)