2013-03-27 3 views
2

я пытаюсь агрегированных данных, как это в R:Совокупные с обрезанными средств в R

df = data.frame(c("a","a","a","a","a","b","b","b","b","b","c","c","c")) 
colnames(df) = "f" 
set.seed(10) 
df$e = rnorm(13,20,5) 

    f e 
1 a 20.09373 
2 a 19.07874 
3 a 13.14335 
4 a 17.00416 
5 a 21.47273 
6 b 21.94897 
7 b 13.95962 
8 b 18.18162 
9 b 11.86664 
10 b 18.71761 
11 c 25.50890 
12 c 23.77891 
13 c 18.80883 

который я хотел бы объединить в колонке е и имеют усеченное среднее из е для каждого уникального типа f (т. е. производят 3 строки данных).

Я пробовал:

df2=data.frame(0) 
df2=aggregate(df$e, by = "f",mean(df$e, trim=0.1)) 

получил следующее сообщение об ошибке:

Error in match.fun(FUN) : 
    'mean(df$e, trim = 0.1)' is not a function, character or symbol 

Пробовал несколько поисков в Интернете и пришел с пустыми руками. Мои фактические данные состоят примерно из 30 значений e за f, поэтому я не беспокоюсь, что trim=0.1 фактически не обрезает средства в примере (поскольку ни одна точка не находится за пределами верхнего и нижнего 5-го процентиля), это будет с реальные данные, это просто для того, чтобы заставить агрегатную функцию работать по назначению. Благодаря!

+1

FYI, если вы запустите 'mean (df $ e, trim = 0,1)', вы увидите, что результат - это функция, символ или символ. – hadley

ответ

4

Попробуйте

df2=aggregate(e~f,data=df,mean,trim=0.1) 
    f  e 
1 a 18.15854 
2 b 16.93489 
3 c 22.69888 

Функцию использовать для расчета в этом случае может быть дана только по имени, например, mean, а также дополнительные параметры, необходимые для выполнения этой функции устанавливаются после запятой.

+1

3 минуты, отличная работа! – Ell

Смежные вопросы