В R, что было бы альтернативой ave(), используя некоторую функцию из семейства apply?

Я использую ave() Функция для получения минимума наблюдений с одинаковым уровнем фактора:

minX = ave(x, list(factorA), FUN=min)

Интересно, что было бы альтернативой, используя некоторые функции из apply семья? В частности, что может быть альтернативой для возврата правильного результата в фрейм данных? Например, давайте иметь небольшой data.frame:

d = data.frame(
    x = c(2,3,3,6,5,7,8,8,9,9),
    factorA = c('a','a','a','a','a','b','b','b','b','b')
)

# function ave automatically enables proper filling of subsets
# defined by the factorA:
d$minX = ave(d$x, list(d$factorA), FUN=min)

# tapply was my first bet, but it does not produce right result:
d$minX2 = tapply(d$x, list(d$factorA), min)

# combination of split and sapply gives back the same wrong
# result as tapply:
d$minX3 = sapply(split(d$x, d$factorA), min)

И вот результаты и различия:

d
# x factorA minX minX2 minX3
# 1  2       a    2     2     2
# 2  3       a    2     7     7
# 3  3       a    2     2     2
# 4  6       a    2     7     7
# 5  5       a    2     2     2
# 6  7       b    7     7     7
# 7  8       b    7     2     2
# 8  8       b    7     7     7
# 9  9       b    7     2     2
# 10 9       b    7     7     7

Только ave() возвращает правильный минимум x дано factorA,

Спасибо!

0 ответов

Другие вопросы по тегам