Мне удалось создать таблицу с median
mean
и sd
на основе нескольких условий с использованием пакета dplry
. Для этого я подготовил данные. Это выглядит немного неаккуратно для меня, и я использую большой набор данных (> 3 ГБ), поэтому я уже использовал data.table
.
Мне интересно, как я могу создать аналогичную таблицу более эффективно, используя пакет data.table
, поэтому, если это возможно, без предварительной подготовки данных. Это было бы здорово, так как мне нужно сделать это и для многих других условий. Кстати, я проверил этот пост , но это не добавило условий.
Это то, что у меня есть и нужно:
Мне нужно mean
из con
на id
и date
= 1 год с момента первого i
или i2
= A04
или A01
.
РЕДАКТИРОВАТЬ (потому что он не работал до):
ДАННЫЕ:
DT <- structure(list(id = c(123L, 123L, 332L, 332L, 332L, 100L, 100L, 113L, 113L, 113L, 113L, 551L, 551L),
i = c("D95", "F85", "A01", "A04", "K20", "B10", "A04", "T08", "P28", "D95", "A04", "B12", "D95"),
i2 = c("F15", "", "", "", "", "", "", "", "", "A01", "", "A01", ""),
date = c("2015-06-19", "2016-08-15", "2013-03-16", "2017-01-17", "2013-01-16", "2009-05-08", "2011-04-03", "2015-05-04",
"2011-04-04", "2017-08-04", "2011-05-24", "2013-11-04", "2013-05-04"),
con = c("1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"),
PS = c("0", "0", "1", "0", "0", "0", "1", "0", "0", "0", "1", "1", "0")),
class = "data.frame", row.names = c(NA, -13L))
Вот что я сделал до сих пор (и который работает):
Я создал столбцы PS
(= имеющие A01
или A04
в i
или i2
) и ds
(= дни с первого A01
или A01
(дней не было) поправьте здесь)) на основе данных.
С пакетом dplyr
я сначала создал data.table
только с строками с ds
между -365 и 0.
j.ds <- subset(DT, ds >= -365 & ds < 0)
Чем агрегировано в таблицу с sum
из con
за id
, например так:
j <- j.ds %>%
group_by(id) %>%
summarise(con = sum(con))
Оттуда я сделал желаемую таблицу:
jP <- j %>%
summarise(median = median(con), mean = mean(con), SD = sd(con))