对我来说,这是一个简单但可笑的艰苦过程。
我想弄清楚如何从数据中制作一组矩阵。
如果你有R,
做
data(iris)
dim(iris)
[1] 150 5
是维度
iris 是 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
的 data.frame由两列随机数和包含 ID 的第三列组成,这些 ID 是大写字母 A、B、C、D、E 和 F,这意味着您有 5 个不同的 ID 可以拆分,然后 along
abind
中的参数call 不必设置为 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
关于r - 按相关列拆分 R 中的矩阵或数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15617697/