2011-11-07 85 views
0

我很難通過for循環中的因子對我的數據進行子集化。這裏是一個說明性的例子:通過R循環中的因子進行子集化

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個分!我也嘗試了一些小功能。我總是遇到這些問題時,我試圖拆就因此任何幫助,將不勝感激

回答

1

一個非數字的因素要獲得分割數i運行

df_split[[i]] 

順便說一句,因爲你的最終目的是mean_vect你最好使用

mean_vect <- lapply(df_split, mean) 

或:

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 
3

僅供參考,完成這一功能使用tapply

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

第一個參數指定要「的意思是 - 組」的值通常完成。第二個就是INDEX,即分割你的組的變量,最後一個顯然是你想要在這些組上運行的功能,在這種情況下意味着。

+0

對於簡單和正確的答案。 –

+0

ran2,正如它所寫的那樣,示例與Ruth的問題數據相匹配,並且不需要其他示例。我留下了你的澄清句子。 – John

+0

對我來說很好。對不起,過度編輯。 –