Я использую функцию smean.cl.normal
из пакета Hmisc, которая возвращает вектор с тремя значениями: средний и нижний и верхний CI. Когда я использую его на data.table
с двумя группами, я получаю 2 столбца и 6 строк. Есть ли способ получить результат с двумя строками, соответствующими двум группам и отдельными столбцами для каждого из выходов функции, то есть среднего и CI?data.table: lapply функция с многоколоночным выходом
require(Hmisc)
require(data.table)
dt = data.table(x = rnorm(100),
gr = rep(c('A', 'B'), each = 50))
dt[, lapply(.SD, smean.cl.normal), by = gr, .SDcols = "x"]
Выход:
gr x
1: A -0.07916335
2: A -0.33656667
3: A 0.17823998
4: B -0.02745333
5: B -0.32950607
6: B 0.27459941
Нужный выход:
gr Mean Lower Upper
1: A -0.07916335 -0.33656667 0.17823998
2: B -0.02745333 -0.32950607 0.27459941
Возможно, существует лучший способ, но следующие работы: 'dt2 <- dcast (dt [, lapply (.SD, smean.cl.normal), by = gr], gr ~ rowid (gr)); setnames (dt2, 2: 4, c ('Mean', 'Lower', 'Upper')) ' – Jaap
Спасибо. Да, я тоже делал это с dcast, просто я думал, что в 'data.table' есть что-то, чего я не хватает. – mattek
обратитесь к http://stackoverflow.com/questions/27494813/data-table-computing-several-column-at-once –