Для полноты я добавляю базовое решение R
к большому ответу @ bouncyball. Я буду использовать их синтетические данные, но я буду использовать cut
для создания возрастных групп до агрегации.
# Creates data for plotting
> set.seed(123)
> dat <- data.frame(age = sample(20:50, 200, replace = TRUE),
awards = rpois(200, 3))
# Created a new column containing the age groups
> dat[["ageGroups"]] <- cut(dat[["age"]], c(-Inf, 20, 30, 40, Inf),
right = FALSE)
cut
разделит набор числовых данных на основе разрывов, определенных во втором аргумент. right = FALSE
переворачивает разрывы, поэтому значения будут включать более низкие значения, чем верхние (т.е. 20 <= x < 30
, а не значение по умолчанию 20 < x <= 30
). Группы не должны быть равномерно распределены. Если вы не хотите включать данные выше или ниже определенного значения, просто удалите Inf
с конца или -Inf
с начала соответственно, и функция вернет
. Если вы хотите присвоить имена своих групп, вы можете сделать это с помощью аргумента labels
.
Теперь мы можем aggregate
на основе созданных нами групп.
> (summedGroups <- aggregate(awards ~ ageGroups, dat, FUN = sum))
ageGroups awards
1 [20,30) 188
2 [30,40) 212
3 [40, Inf) 194
Наконец, мы можем построить эти данные с помощью функции barplot
. Ключевым моментом здесь является использование names
для возрастных групп.
> barplot(summedGroups[["awards"]], names = summedGroups[["ageGroups"]])
Вы можете сделать это с помощью макроса. Сделайте это так:
Public Sub CommentSelection()
If Not DTE.ActiveDocument.Selection.IsEmpty Then
DTE.ActiveDocument.Selection.Text = "/* " + DTE.ActiveDocument.Selection.Text + " */"
End If
End Sub
Привяжите его к ключу, отличному от Ctrl-K + C, вы захотите сохранить его.
ReSharper делает это CTRL + SHIFT + C
В противном случае макрос будет вашим лучшим выбором, добавьте это в свои макросы VS и привяжите его к ярлыку на клавиатуре вашего выбор:
edit: удалил мой дрянной код, nobugz избил меня.