При условии, что ваши данные уже отсортированы, вы можете использовать:
aggregate(value ~ ID + group, df, diff)
ID group value
1 1 A -3
2 2 A 3
3 3 B 7
4 4 B 1
Или:
library(dplyr)
df %>%
group_by(ID, group) %>%
summarise(new_value = diff(value))
Ответ на этот вопрос может быть очень длинным в отношении объема аргумента, Я думаю, что прежде всего было бы лучше сосредоточить внимание на том, что является выбором и причинами, которые сделали необходимым разделить элементы в нескольких сборках, и в целом это может быть в общем Проектирование и Расслоение и / или принятие проекта структура чистая.
1. Каковы преимущества разделения Solutions / DLL?
Преимущество разделения решений и сборок в целом связано с подходом к проектированию, повторным использованием кода и организацией слоев, как было сказано, разделение решений помогает совместно использовать объекты / компоненты и распределять ответственность между уровнями, продвижение многоцелевых и подключаемых решений (см., например, различные целевые сборки хранилища (база данных, файлы и т. д.)), тестируемость
2. Каковы недостатки разделения Solutions / DLL?
Основными недостатками, как другие говорили до меня, являются: в первую очередь сложность (управление, обслуживание), затем производительность (но это другое обсуждение, это не так просто сказать)
3. Если я создам новое решение / DLL для каждого общего ресурса, не будет много решений?
Это зависит, прежде всего, от того, что я думаю, это может зависеть от выбора дизайна
4. После слишком большого количества решений (например, 40+) это будет иметь некоторые негативные последствия для производительности IDE (VS.NET 2008)?
Я не уверен в снижении производительности в IDE VS2008, но уверен, что это может повлиять на производительность. управлять одним решением из более чем 60 проектов, чем, например, 4 решения по 20 проектов в каждом. не будет много решений?
Это зависит, прежде всего, я думаю, это может зависеть от выбора дизайна
4. После слишком большого количества решений (например, 40+) это будет иметь некоторые негативные последствия для производительности IDE (VS.NET 2008)?
Я не уверен в снижении производительности в IDE VS2008, но уверен, что это может повлиять на производительность. управлять одним решением из более чем 60 проектов, чем, например, 4 решения по 20 проектов в каждом. не будет много решений?
Это зависит, прежде всего, я думаю, это может зависеть от выбора дизайна
4. После слишком большого количества решений (например, 40+) это будет иметь некоторые негативные последствия для производительности IDE (VS.NET 2008)?
Я не уверен в снижении производительности в IDE VS2008, но уверен, что это может повлиять на производительность. управлять одним решением из более чем 60 проектов, чем, например, 4 решения по 20 проектов в каждом. Должно быть ясно, что производительность VS IDE может быть снижена даже после открытия, например, 35 файлов вместе из одного или двух проектных решений.
В конце я думаю, что БОЛЬШОЕ, что я думаю, это то, что лучше " строить «именно то, что действительно нужно, чем, например, чрезмерное проектирование, поэтому, когда все становится слишком сложным для управления (для многих проектов), лучше остановиться и подумать:« все идет хорошо? »
В общем, я предлагаю использовать хотя бы одну DLL (чтобы отделить бизнес-логику от вашего пользовательского интерфейса), и больше, если у вас будут разные версии вашего приложения, которым может не понадобиться весь этот код.
* Мы часто заставляем себя поверить, что будем использовать этот замечательный класс Ордена. Мы, вероятно, не будем. Доменные модели просто имеют тенденцию быть разными.
В общем случае вы должны иметь разделение везде, где есть логическое разделение зависимостей в вашем коде. Например, если вы создаете набор связанных небольших приложений, которые основаны на общем ядре, имеет смысл иметь одну библиотеку с основными классами и по одной для каждого такого приложения. Вот простой график зависимостей, который отражает такое разделение:
+------------> Core <------------+
| ^ |
| | |
Level Builder | Game Server
^ |
| |
+-----------Game Client
Наконец, в .NET нет отличного способа иметь зависимости кода только для тестирования, кроме как посредством условной компиляции, поэтому также неплохо бы иметь различные тесты. в отдельной библиотеке.
Основными недостатками большого количества dll являются:
Преимущество заключается в большем разделении - но на самом деле вы можете добиться такого же (или аналогичного) разделения внутри одной (или нескольких) библиотек.
В отношении проблемы с циклическими зависимостями - возможно, вам следует взглянуть на «внедрение зависимостей» и «инверсия управления».
Я боролся с противоположностью вашей проблемы - слишком много DLL и зависимостей.
Я не знаю ответов, но вот некоторые вопросы, которые могут дать вам несколько полезных указатели.
Структурирование проектов и зависимостей больших приложений winforms в C #
Что вы делаете со ссылками при выгрузке проекта в Visual Studio?
Обратите внимание, что вы можете иметь разные пространства имен в одной и той же dll, (и наоборот , вы можете распределить пространство имен по нескольким библиотекам.)
Для моих решений с большим количеством проектов у меня в настоящее время есть настройка, в которой у меня есть настраиваемая конфигурация сборки (нажмите в выпадающем меню Debug / Release и выберите Configuration Manager ) под названием «WorkingSetOnly», где я могу выбрать компилировать или нет каждый проект в Run - это ускоряет выполнение, но сохраняет intellisense,определение и т. д. Я также использую папки решений для организации проектов в два «сегмента» - WorkingSet и другие, хотя я еще не нашел способа автоматически связать их (config и папки).
Проблема круговой зависимости означает:
[Lib1]
[Project1]
[ClassA]
[Project2]
[ClassB]
если ClassA и ClassB ссылаются друг на друга, они должны быть извлечены в Lib1 и иметь ссылки Project1 и Project2 на Lib1, потому что очень трудно сохранить Project1 и 2 в синхронизировать, не делая этого.
Это не значит, что нужно сходить с ума, и я уверен, что производительность IDE не будет большой проблемой. Если у вас более 40 проектов, значит, есть проблема с дизайном.