У меня есть data.table как этотКак вернуть Nas недостающих комбинаций при использовании группы по data.table в
library(data.table)
tt1 <- structure(list(start = c(3, 4, 4, 4, 22, 4, 16),
end = c(5, 40,40, 40, 25, 40, 18),
u = c(1L, 2L, 2L, 2L, 3L, 2L, 4L),
duration = c(2, 36, 36, 36, 3, 36, 2),
i.start = c(3, 3, 29, 20, 20, 14, 14),
i.end = c(5, 5, 31, 22, 22, 16, 16),
q = c(7L, 7L, 8L, 9L, 1L, 10L, 10L),
i.duration = c(2, 2, 2, 2, 2, 2, 2)), row.names = c(NA,-7L),
class = c("data.table", "data.frame"),
.Names = c("start", "end", "u", "duration", "i.start", "i.end", "q", "i.duration"))
setDT(tt1)
> tt1
start end u duration i.start i.end q i.duration
1: 3 5 1 2 3 5 7 2
2: 4 40 2 36 3 5 7 2
3: 4 40 2 36 29 31 8 2
4: 4 40 2 36 20 22 9 2
5: 22 25 3 3 20 22 1 2
6: 4 40 2 36 14 16 10 2
7: 16 18 4 2 14 16 10 2
Я хотел бы, чтобы фильтровать записи, в которых «длительность» < = 2 и группы элементов по каждая комбинация (i.start, i.end). Я был в состоянии сделать это,
> tt1[duration<=2, mean(duration), by =c("i.start","i.end"),nomatch=NA]
i.start i.end V1
1: 3 5 2
2: 14 16 2
Однако, я также хотел бы NA, чтобы быть возвращен для (i.start, i.end) групп, длительность которых> 2 вместе с предыдущим результатом.
i.start i.end V1
1: 3 5 2
2: 14 16 2
3: 29 31 NA
4: 20 22 NA
Как это можно сделать?
FYI: 'тт [длительность <= 2, средняя (длительность), по = с ("i.start", "i.end")]' не воспроизводим. Я думаю, вы имеете в виду 'tt1', но он все еще возвращает ошибку – BigDataScientist
@BigDataScientist Извините. Да, он должен работать с tt1, я исправил это сейчас. Какую ошибку вы получаете? – pauljeba
'Ошибка в' [.data.frame' (tt1, i.duration <= 2, mean (i.duration), by = c ("i.start",: неиспользуемый аргумент (by = c ("i. start "," i.end "))' Возможно, у меня нет соответствующего пакета. Но не беспокойтесь обо мне, я просто хотел указать, что может быть больше ответов, если оно быстро воспроизводится :) – BigDataScientist