對於我來說,這是一個簡單而又荒唐可笑的過程。 我想弄清楚如何從數據中創建一組矩陣。在依賴列中拆分R中的矩陣或數據集
如果你有R,
做
data(iris)
dim(iris)
[1] 150 5
是dimesion
光圈R中給定的數據編程
當你
iris(3)
dim(iris3)
[1] 50 4 3
你得到一組三個矩陣分爲「物種」從屬列
我如何編程/代碼,所以我可以做到這一點爲其他數據集?
感謝您的時間和參觀
對於我來說,這是一個簡單而又荒唐可笑的過程。 我想弄清楚如何從數據中創建一組矩陣。在依賴列中拆分R中的矩陣或數據集
如果你有R,
做
data(iris)
dim(iris)
[1] 150 5
是dimesion
光圈R中給定的數據編程
當你
iris(3)
dim(iris3)
[1] 50 4 3
你得到一組三個矩陣分爲「物種」從屬列
我如何編程/代碼,所以我可以做到這一點爲其他數據集?
感謝您的時間和參觀
你從abind
包尋找abind
功能:
> library(abind)
> IrisArray <- abind(split(iris[, -5], iris[,5]), along=3)
> dim(IrisArray)
[1] 50 4 3 # these are the dimensions you want.
如果你想爲這一個功能,再看看這個:
library(abind)
Splitbyfactor <- function(x, by='Species'){
ind <- which(colnames(x)==by)
abind(split(x[, -ind], x[,ind]), along=3)
}
dim(Splitbyfactor(iris, by='Species'))
[1] 50 4 3
編輯
這編輯是爲了回答你的評論,假設你有一個名爲df
的數據框架,它由兩列隨機數和第三列包含ID組成,這些ID是大寫字母A,B,C,D,E和F,這意味着你有5個不同的ID進行拆分,那麼調用中的along
參數不一定要設置爲5,因爲它沒有引用ID的數量,它指的是生成數組的維數;)。看到這個例子
> df <- data.frame(A=rnorm(10), B=rnorm(10), ID=rep(LETTERS[1:5], each=6))
> dim(df)
[1] 30 3
> dim(Splitbyfactor(df, by='ID'))
[1] 6 2 5
這很好,但是我可以有一個比3更好的方法嗎?由於Iris有3個物種,它似乎是3個,但我的數據需要10個。 – user2201675 2013-03-25 14:55:32
如果你的數據有10個物種,它將被考慮在內,而'Splitbyfactor'會給你你所期待的。 ;) – 2013-03-25 14:58:07
我不明白你在做什麼。虹膜(3)'不做任何事情,並在這裏引發錯誤。 – juba 2013-03-25 14:43:18
(+1)@juba。不太清楚。我的猜測是,你正在尋找'分裂(虹膜,虹膜$物種)'。 – Arun 2013-03-25 14:45:47
是的,拆分(虹膜,虹膜$物種)是我想要的,但拆分(虹膜,虹膜$物種)具有所有物種名稱列。請注意虹膜3有三個矩陣,分別爲50和4. – user2201675 2013-03-25 14:50:24