我有一个数据框
df<-data.frame(a=c(1,2,3),b=c(4,5,6),c=c(7,8,9),d=c(10,11,12))
a b c d
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
Run Code Online (Sandbox Code Playgroud)
我想用每一行来创建3(nrow(df))2*2矩阵.第一次使用1,4,7,10,第二次使用2,5,8,11,第三次使用3,6,9,12.这样我就可以得到3个矩阵.谢谢.
我们可以使用split
将数据集拆分成list
并使用matrix
lapply(split.default(as.matrix(df), row(df)), matrix, 2)
Run Code Online (Sandbox Code Playgroud)
如果我们需要矩阵列为1,7,然后是4,10,请使用 byrow=TRUE
lapply(split.default(as.matrix(df), row(df)), matrix, 2, byrow=TRUE)
Run Code Online (Sandbox Code Playgroud)
或者使用apply
具有MARGIN = 1
与包装它list
得到一个list
输出
do.call("c", apply(df, 1, function(x) list(matrix(x, ncol=2))))
Run Code Online (Sandbox Code Playgroud)
如果我们需要一个for
循环,预先指定a
为list
以length
等于"东风"的行数
a <- vector("list", nrow(df))
for(i in 1:nrow(df)){ a[[i]] <- matrix(unlist(df[i,]), ncol=2)}
a
Run Code Online (Sandbox Code Playgroud)
或者如果它可以存储为 array
array(t(df), c(2, 2, 3))
Run Code Online (Sandbox Code Playgroud)