Опция с использованием data.table
library(data.table)
setDT(df)[, .(firstprice = Price[which.min(Index)],
lastprice = Price[which.max(Index)]), ID]
# ID firstprice lastprice
#1: ABC 31 81
#2: BCD 100 84
#3: DEF 31 42
Или другой вариант с tidyverse
library(tidyverse)
df %>%
group_by(ID) %>%
filter(Index %in% range(Index)) %>%
mutate(newCol = c("firstprice", "lastprice")) %>%
select(-Index) %>%
spread(newCol, Price)
# A tibble: 3 x 3
# Groups: ID [3]
# ID firstprice lastprice
# <fct> <dbl> <dbl>
#1 ABC 31 81
#2 BCD 100 84
#3 DEF 31 42
James Kovacs сделал скринкаст dnrtv, где он показывает, как создать Ваш собственный контейнер МОК. Я рекомендую это новичку, не потому что это - обязательно то, которое Вы хотите использовать, но потому что это показывает основы того, почему Вам нужен контейнер МОК и какова основная функциональность. После этого примерьте перемещение в Карту Структуры или замок Windsor.
Ninject, кажется, получает большую поддержку в этих вопросах
Я вспоминаю, что существуют некоторые действительно простые учебные руководства от BitterCoder на Виндзоре Замка, который я нашел полезным и легким следовать.
Даже если Вы решаете использовать Виндзор или нет, те пошаговые демонстрации должны все еще дать Вам хорошую идею типов функций / функциональность для ожидания из других контейнеров.
Я сделал некоторую оценку порта Spring.NET. Это предлагает AOP, установку файла конфигурации контейнера и другой интересный материал. Я думаю, что их сайт хорошо организован, и документы правильно написаны.
Я сказал бы StructureMap. Это - одна из более сформировавшейся платформы и действительно простой в использовании. Кроме того, это может интегрироваться хорошо с NMock для создания фиктивных объектов, которые неоценимы для поблочного тестирования. Поддерживаемой платформой Microsoft является Единица, таким образом, можно посмотреть на это также.
Я соглашаюсь с разностью потенциалов. Автор того скринкаста даже говорит, что необходимо прокрутить Ваш. Это так, Вы будете знать, как они работают. Затем, после того как у Вас есть это вниз, можно углубить к более полнофункциональному.
Было также упомянуто, что действительно нет то, что 'один контейнер МОК для управления их всех'. Это вызвано тем, что они в значительной степени у всех есть те же функции. Это сводится, какую реализацию Вы одобряете. Например, при использовании Платформы Библиотеки Предприятия затем в большой степени затем, Вы могли бы одобрить контейнер Единицы, потому что Вы получаете свободные принудительные ассортименты к остальной части EntLib. Или возможно у Вас аллергия на XML затем, можно использовать Ninject, который имеет очень хороший быстрый интерфейс. Каждая платформа имеет свои достоинства и недостатки, но они в значительной степени будут тем же от точки зрения новичков.
Легкий, простой, быстрый, ориентированный на C # 3.0 и работает (для меня) лучше в сложных проектах, чем любой другой контейнер IoC (даже Виндзор).
Основные функции :