使用循环在R中创建一个大列表
我对此有一个问题:使用循环在R中创建一个大列表,r,loops,matrix,R,Loops,Matrix,我对此有一个问题: 我需要创建一个矩阵列表。这是一个数据框: data=data.frame("Node"=c(1:5), posx=c(2,3,6,8,1), posy=c(1,1,4,7,8)) Node posx posy 1 1 2 1 2 2 3 1 3 3 6 4 4 4 8 7 5 5 1 8 现在我想创建一个矩阵列表。带回路。我想创建如下矩阵列表: l=list(l1,l2,l3,l4
我需要创建一个矩阵列表。这是一个数据框:
data=data.frame("Node"=c(1:5), posx=c(2,3,6,8,1), posy=c(1,1,4,7,8))
Node posx posy
1 1 2 1
2 2 3 1
3 3 6 4
4 4 8 7
5 5 1 8
现在我想创建一个矩阵列表。带回路。我想创建如下矩阵列表:
l=list(l1,l2,l3,l4,l5)
其中:
l1=cbind(c(2),c(1))
l2=cbind(c(3),c(1))
l3=cbind(c(6),c(4))
l4=cbind(c(8),c(7))
l5=cbind(c(1),c(8))
以下是我的尝试:
for (i in 1:(data$Node) ) {
l=list(cbind(c(data$posx[i]), (data$posy[i])))
}
试一试
或
或
或使用data.table
library(data.table)
setDT(data)[,list(list(as.matrix(.SD))) , by=Node]$V1
您也可以通过以下方式使用
:
by(data[-1], data[1], as.matrix)
非常感谢!它正在工作!在这种情况下,如果我有一个额外的专栏呢?示例:data=data.frame(“节点”=c(1:5),posx=c(2,3,6,8,1),posy=c(1,1,4,7,8),rnd=c(“A”,“B”,“c”,“D”,“E”)。但我只想要数字?(没有最后一列?@sgtFury Trylappy(split(data[,2:3],row(data)[,1]),as.matrix)
!谢谢你的回复!我想你对这个新问题想要的是list2env(setNames(lappy(split)(as.matrix(data[,-1]),row(data)[,1]),matrix,ncol=2),paste0('mat',1:nrow(data))),envir=.GlobalEnv)
然后检查mat1
,mat2
是的,非常感谢!我为这个不太好的问题道歉。没问题,我对你真正想要的东西感到困惑。但是,我认为最好将其列在一个列表中,而不是作为单独的矩阵
lapply(split(as.matrix(data[,-1]),row(data)[,1]), matrix, ncol=2)
library(data.table)
setDT(data)[,list(list(as.matrix(.SD))) , by=Node]$V1
by(data[-1], data[1], as.matrix)