2015-07-19 95 views
2

我正在嘗試對數據集進行排序,獲取每行的方差,然後創建一個包含每行最高方差的新對象。例如,據我所能得到的是:通過方差索引原始數據

data(iris) 
#The fifth column in iris is a string vector so I will exclude it' 
newvar<-apply(iris[1:4],1,var) 
newvar.srt<-sort(newvar, decreasing = TRUE) 

到目前爲止這麼好?我現在的問題是,我如何返回到虹膜數據集並創建一個只包含前30個變量行的新對象?

我想過比較newvar和newvar.srt [1:30]來嘗試索引原始列,然後將它們作爲新對象索引到一個新對象中 - 但是不能[top30.variance.rows,]但不能讓它工作。

回答

2

您正在尋找order。試試這個:

data(iris) 
nv <- apply(iris[1:4], MARGIN = 1, FUN = var) 
n_rows = 30 
data_sample = head(iris[order(nv, decreasing=TRUE), ], n_rows) 
+1

經過測試,這是我正在尋找的!謝謝。 – Sean

+0

只是好奇(因爲我真的很喜歡學習),你可以在索引的x部分(例如iris [order(),])中使用order()函數來解釋它嗎?如果您在y軸/列中使用它,會發生什麼? – Sean

+0

'order'發送一個索引向量。嘗試'order(nv,decrease = TRUE)'來理解它的作用。 – Elvis