通过'连接数据;rbind';作为R中的循环
我有两个同样长的数据集-'vpXmin'和'vpXmax'由'vp'创建通过'连接数据;rbind';作为R中的循环,r,loops,for-loop,R,Loops,For Loop,我有两个同样长的数据集-'vpXmin'和'vpXmax'由'vp'创建 > head(vpXmin) vp [1,] 253641 2621722 [2,] 253641 2622722 [3,] 253641 2623722 [4,] 253641 2624722 [5,] 253641 2625722 [6,] 253641 2626722 > head(vpXmax) vp [1,] 268641 2621
> head(vpXmin)
vp
[1,] 253641 2621722
[2,] 253641 2622722
[3,] 253641 2623722
[4,] 253641 2624722
[5,] 253641 2625722
[6,] 253641 2626722
> head(vpXmax)
vp
[1,] 268641 2621722
[2,] 268641 2622722
[3,] 268641 2623722
[4,] 268641 2624722
[5,] 268641 2625722
[6,] 268641 2626722
我想使用“rbind”连接这些数据集中的每一行,并想创建单独的矩阵;e、 g
l1<-rbind(vpXmax[1,],vpXmin[1,])
l2<-rbind(vpXmax[2,],vpXmin[2,])
... ...
知道为什么吗?另外,请给我一些好的参考资料来学习使用R的不同类型的循环,如果有的话。提前感谢。正如@ToNoy所指出的,您想要的输出类型并不明显。最简单的方法是创建一个列表,其中每个元素都是两个原始数据帧的每一行的结果
A <- data.frame("a" = runif(100, -1, 0), "b" = runif(100, 0, 1))
Z <- data.frame("a" = runif(100, -2, -1), "b" = runif(100, 1, 2))
output <- vector("list", nrow(A))
for (i in 1:nrow(A)) {
output[[i]] <- rbind(A[i, ], Z[i, ])
}
A可能类似于:
vpXmax <- matrix(1:10,ncol=2)
vpXmin <- matrix(11:20,ncol=2)
l <- lapply(1:nrow(vpXmin),function(i) rbind(vpXmax[i,],vpXmin[i,]) )
虽然这可能并不理想,但您的初始循环有一个主要错误。
您没有分配输出,因此需要使用assign
或您可以发布dput(head(vpXmax))
和dput(head(vpXmin))的输出吗。另外,您是否希望每行有一个单独的矩阵?请发布一个你想要的输出样本以避免模棱两可。当你说“我失败了…”时,请准确描述发生了什么!你收到错误消息了吗?我注意到的第一件事是,您没有将rbind
的结果赋给变量:看起来您的循环将完成所有计算,但会丢弃结果。for循环中的错误是什么?您需要在每个循环中进行分配,例如,l[[i]]控制台中的“for循环”没有错误!!谢谢,但我的最终目标是将这些对象中的每一个都制作成空间线。所以我用“lappy”来表示:L1
vpXmax <- matrix(1:10,ncol=2)
vpXmin <- matrix(11:20,ncol=2)
l <- lapply(1:nrow(vpXmin),function(i) rbind(vpXmax[i,],vpXmin[i,]) )
l[[1]]
# [,1] [,2]
#[1,] 1 6
#[2,] 11 16
l[[2]]
# [,1] [,2]
#[1,] 2 7
#[2,] 12 17
for (i in 1:nrow(vpXmax)) {assign(paste0("l",i), rbind(vpXmax[i,],vpXmin[i,]) )}
> l1
# [,1] [,2]
#[1,] 1 6
#[2,] 11 16
> l2
# [,1] [,2]
#[1,] 2 7
#[2,] 12 17