关于r:仅保留具有多个观测值的数据组

Keep only groups of data with multiple observations

我试图通过多种观察仅保留设计。

我有以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
help <- data.frame(deid = c(1, 5, 5, 5, 5, 5, 5, 12, 12, 12, 12),
                   session.number = c(1, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4),
                   days.since.last = c(0, 0, 7, 14, 93, 5, 102, 0, 21, 104, 4))

   deid session.number days.since.last
1     1              1               0
2     5              1               0
3     5              2               7
4     5              3              14
5     5              4              93
6     5              5               5
7     5              6             102
8    12              1               0
9    12              2              21
10   12              3             104
11   12              4               4

我微不足道的尝试是使用group_by然后使用filter()命令

1
help %>% group_by(deid) %>% filter(session.number >=2)

但是,它只能将session.number保持为2或更大。 所以我摆脱了deid = 1,但是所有其余的deid数据都从session.number 2开始,而不是session.number 1。

我要告诉R的是保持组(deid)的观察值大于1(session.number)

非常感谢您的协助。


应该这样做-您需要按使用n()获得的每个组中的观察数进行过滤:

1
2
3
4
5
6
7
8
9
10
11
12
13
help %>% group_by(deid) %>% filter(n()>1)

  deid session.number days.since.last
1     5              1               0
2     5              2               7
3     5              3              14
4     5              4              93
5     5              5               5
6     5              6             102
7    12              1               0
8    12              2              21
9    12              3             104
10   12              4               4


使用data.table代替:

1
2
3
helpcount <- help[, list(Count = .N), by = deid]
helpf <- merge(help,helpcount, by ="deid")
helpf <- helpf[Count > 1]

编辑:更加简洁:

1
2
help[, Count := .N, by = deid]
help[Count > 1]

EDIT2:thelatemail的更为简洁的解决方案:

1
help[,if(.N > 1) .SD, by=deid]