есть ли эквивалент функции egen Stata?

Stata имеет очень хорошую команду,egen, что позволяет легко вычислять статистику по группе наблюдений. Например, можно вычислить max, mean и min для каждой группы и добавить их в качестве переменной в подробный набор данных. Команда Stata представляет собой одну строку кода:

by group : egen max = max(x)

Я никогда не находил ту же команду в р. summarise на dplyr пакет упрощает вычисление статистики для каждой группы, но затем я должен запустить цикл, чтобы связать статистика для каждого наблюдения :

library("dplyr")
N  <- 1000
tf  <- data.frame(group = sample(1:100, size = N, replace = TRUE), x = rnorm(N))
table(tf$group)
mtf  <- summarise(group_by(tbl_df(tf), group), max = max(x))
tf$max  <- NA
for (i in 1:nrow(mtf)) {
  tf$max[tf$group == mtf$group[i]]  <- mtf$max[i]
}

есть ли у кого-нибудь лучшее решение ?

1 ответов


вот несколько подходов:

dplyr

library(dplyr)

tf %>% group_by(group) %>% mutate(max = max(x))

ave

Это использует только базу R:

transform(tf, max = ave(x, group, FUN = max))

данные.таблица

library(data.table)

dt <- data.table(tf)
dt[, max:=max(x), by=group]