Используйте агрегат по числовым переменным и таблицу / проп. Таблицу по фактору.
ag <- aggregate(cbind(value1, value2) ~ group, data,
function(x) c(min = min(x), max = max(x)))
tab12 <- as.data.frame.matrix(setNames(as.data.frame(t(ag[-1])),
ag[[1]]))
counts <- table(data$group)
tab3 <- prop.table(table(group = data$value3, value3 = data$group), 2)
rownames(tab3) <- paste("value3", rownames(tab3), sep = " = ")
rbind(tab12, n = counts, as.data.frame.matrix(tab3))
дает следующее
0 1
value1.min 1.0 2.0
value1.max 9.0 10.0
value2.min 1.0 2.0
value2.max 9.0 10.0
n 10.0 10.0
value3 = 1 0.4 0.4
value3 = 2 0.2 0.4
value3 = 3 0.4 0.2
Эта альтернатива немного утомительна, но проста:
library(sqldf)
res <- sqldf('select
[group],
min(value1) [value1.min],
max(value1) [value1.max],
min(value2) [value2.min],
max(value2) [value2.max],
count(*) n,
avg(value3 = 1) [value3 == 1],
avg(value3 = 2) [value3 == 2],
avg(value3 = 3) [value3 == 3]
from data
group by [group]')
setNames(as.data.frame(t(res[-1])), res$group)
дает: [ 1113]
0 1
value1.min 1.0 2.0
value1.max 9.0 10.0
value2.min 1.0 2.0
value2.max 9.0 10.0
n 10.0 10.0
value3 == 1 0.4 0.4
value3 == 2 0.2 0.4
value3 == 3 0.4 0.2
Используя пакет skimr, мы можем сделать это:
library(dplyr)
library(skimr)
library(tidyr)
# L <- list("fraction = 1" = function(x) mean(x == 1),
# "fraction = 2" = function(x) mean(x == 2),
# "fraction = 3" = function(x) mean(x == 3))
levs <- levels(data$value3)
L <- lapply(levs, function(lv) function(x) mean(x == lv))
names(L) <- paste("fraction =", levs)
skim_with(integer = list(min = min, max = max),
factor = c(L, n = length), append = FALSE)
data %>%
group_by(group) %>%
skim %>%
ungroup %>%
select(group, variable, stat, value) %>%
spread(group, value)
, давая следующее:
# A tibble: 8 x 4
variable stat `0` `1`
<chr> <chr> <dbl> <dbl>
1 value1 max 9 10
2 value1 min 1 2
3 value2 max 9 10
4 value2 min 1 2
5 value3 fracion = 1 0.4 0.4
6 value3 fracion = 2 0.2 0.4
7 value3 fracion = 3 0.4 0.2
8 value3 n 10 10
Пересмотренное базовое решение; добавлены решения sqldf и skimr. Улучшено решение скимра.
Действительно нет никакой "книги правила" для соглашений о присвоении имен. Вы находите тот, который работает на Вас.
Наиболее распространенное принятие с .NET должно следовать соглашениям о присвоении имен .NET Microsoft, и с веб-сервисами, просто рассматривать их как расширение Вашего блока, не как особый случай.
http://msdn.microsoft.com/en-us/library/ms229045.aspx
Так, GetMortgages (), GetMortgagesInPriceRange (startPrice, endPrice), и т.д.... прекрасен.
До "сохранения" много людей будет использовать "SubmitNoun".
Кроме того, необходимо, вероятно, постараться не перегружать методы веб-сервиса. Используйте отличные имена методов.
Я думаю, что Вы в порядке. Опишите их на основе того, что это, они делают. GetAllMortgages (), GetMortgagesInPriceRange (), и т.д.
Учтите любую проблемно-ориентированную терминологию. Например, если бы понятие ипотечной индустрии для диапазона цен ипотеки было "Демографическим", то GetMortgagesForDemographic был бы лучшим именем, даже если Вы знаете, что единственными "демографическими" функциями является диапазон цен.
Вы могли пойти с шаблоном репозитория, если у Вас есть подобный репозиторию сервис (как я предполагаю Вашими примерами, которые Вы имеете), конвенция
GetXByY(params)
Вы также можете использовать метод службы GetMortgages () для получения документа 'вместо параметров и разработайте дополнительные критерии фильтрации в документе. Таким образом, у вас будет только один метод, который обрабатывает все «перегрузки».
<GetMortgages>
<filter> .... </filter>
<sort> .... </sort>
<group> .... </group>
</GetMortgages>