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)
非常感谢您的协助。
应该这样做-您需要按使用
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] |