通过依赖列拆分R中的矩阵或数据集

时间:2013-03-25 14:40:26

标签: r matrix set

对我来说,这是一个简单而又荒谬的过程。 我试图找出如何从数据中制作一组矩阵。

如果你有R,

DO

data(iris)
dim(iris)

[1] 150   5

是dimesion

iris是R编程中给出的数据

当你这样做时

iris(3)
dim(iris3)

[1] 50  4  3

你得到一组三个矩阵,分为“物种”依赖列

我如何编程/编码,以便我可以为其他数据集???

执行此操作

感谢您的时间和访问

1 个答案:

答案 0 :(得分: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的data.frame,包含两列随机数和第三列包含ID,这些ID是大写字母A,B,C,D ,E和F,这意味着您有5个不同的ID要拆分,然后along调用中的abind参数不必设置为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