Вот простая проблема, которую я пытаюсь решить: у меня есть таблица данных, как следующая таблица, и я пытаюсь использовать функцию dcast.data.table
для вычисления числа продвижения для каждой группы, но я заинтересован, чтобы вычислить median
сортов в каждой группе:Объедините несколько dcast data.table (которые используют один и тот же ключ) эффективно
set.seed(10);
DT = data.table(GROUP = sample(c("a","b","c"),100,replace = T),
ADVANCED = sample(c("ADVANCED","DROP"),100,replace = T),
GRADE = sample(1:10,100, replace=T))
GROUP ADVANCED GRADE
1: b ADVANCED 3
2: a ADVANCED 6
3: b ADVANCED 7
4: c ADVANCED 9
95: b DROP 6
96: c ADVANCED 5
97: a DROP 10
98: b ADVANCED 1
99: c DROP 6
100: a DROP 2
GROUP ADVANCED GRADE
по существу здесь результат я ищу:
result = merge(
dcast.data.table(DT,.Primitive("~")(GROUP,ADVANCED)),
dcast.data.table(DT,.Primitive("~")(GROUP,.),
value.var="GRADE",
fun.aggregate=median));
setnames(result,".","MEDIAN_GRADE")
GROUP ADVANCED DROP MEDIAN_GRADE
1: a 17 19 6
2: b 20 21 7
3: c 13 10 6
Сейчас я интересно, как я могу это сделать без создания двух отдельных таблиц dcast и слияния в конце. Я имею дело со многими строками и столбцами в моих таблицах, а группировка по ключевым словам является узким местом. Мне интересно, есть ли лучший способ рассчитать это?
** Поскольку мой первый вопрос был неопределенным, я полностью редактирую (спасибо Фрэнку и Акруну за их отзывы).
Прежде чем создавать случайные примеры, вы должны использовать 'set.seed'. – Frank
Существует 'reshape2 :: dcast (DT, GROUP ~ ADVANCED, marginins =" ADVANCED ")', но вы теряете доступ к улучшениям, сделанным в 'data.table :: dcast'. Похоже, что «поля» никогда не были реализованы: https://github.com/Rdatatable/data.table/issues/1214 – Frank
Это похоже на совершенно другой вопрос из того, который вы опубликовали ранее. – akrun