Подмножество по факторам в цикле R

У меня возникают трудности с подстановкой данных по факторам в цикле for. Вот наглядный пример:

x<-rnorm(n=40, m=0, sd=1)
y<-rep(1:5, 8)
df<-as.data.frame(cbind(x,y))
df_split<-split(df, df$y)
mean_vect<-rep(-99, 5)

for (i in c(1:5)) {
current_df<-df_split$i
mean_vect[i]<-mean(current_df)
}

`

Этот подход не работает, потому что я думаю, что R ищет разделение с именем «i», когда я действительно хочу, чтобы он вытащил i-е разделение! Я также попробовал функцию подмножества с небольшой радостью. Я всегда сталкиваюсь с этими проблемами, когда пытаюсь разбить нечисловой коэффициент, поэтому любая помощь будет оценена по достоинству.


person LoveMeow    schedule 07.11.2011    source источник


Ответы (2)


Чтобы получить разделенный номер i, запустите

df_split[[i]]

Кстати, так как ваша конечная цель mean_vect вам лучше использовать

mean_vect <- lapply(df_split, mean)

or:

mean_vect <- tapply(df$x, df$y, mean)
mean_vect
        1          2          3          4          5 
0.2566810 -0.1528079 -0.2097333 -0.1540343  0.3609312 
person Max    schedule 07.11.2011

К вашему сведению, функциональность для этого обычно выполняется с помощью tapply

tapply( df$x, df$y, mean )

Первый аргумент указывает значение, которое вы хотите «усреднить». Второй - это просто ИНДЕКС, то есть переменная, которая разбивает ваши группы, а последняя, ​​очевидно, функция, которую вы хотите запустить для этих групп, в данном случае означает.

person John    schedule 07.11.2011
comment
ran2, пример, как было написано, соответствовал данным вопроса Рут и не нуждался в дальнейшем примере. Я оставил ваше уточняющее предложение. - person John; 07.11.2011