在R中是否可以说-我想要从位置i
到向量/矩阵末尾的所有索引?假设我想要一个从第三列开始的子矩阵。我目前只知道这种方式:
A = matrix(rep(1:8, each = 5), nrow = 5) # just generate some example matrix...
A[,3:ncol(A)] # get submatrix from 3rd column onwards
但是我真的需要写ncol(A)
吗?有没有什么优雅的方式来说“从第3列开始”?像A[,3:]
这样的?(或A[,3:...]
)?
发布于 2011-09-21 22:01:32
对于行(而不是您示例中的列),则可以使用head()
和tail()
。
A <- matrix(rep(1:8, each = 5), nrow = 5)
tail(A, 3)
几乎与
A[3:dim(A)[1],]
(打印的行名/索引是不同的)。
这些方法也适用于矢量和数据帧:
> tail(1:10, 4)
[1] 7 8 9 10
> tail(data.frame(A = 1:5, B = 1:5), 3)
A B
3 3 3
4 4 4
5 5 5
对于列版本,您可以调整tail()
,但它有点棘手。我想知道在这里NROW()
和NCOL()
是否比dim()
更有用?
> A[, 3:NCOL(A)]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 3 4 5 6 7 8
[2,] 3 4 5 6 7 8
[3,] 3 4 5 6 7 8
[4,] 3 4 5 6 7 8
[5,] 3 4 5 6 7 8
或者将其颠倒过来,而不是向R索要东西,而是让它丢弃东西。下面是一个封装这个函数的函数:
give <- function(x, i, dimen = 1L) {
ind <- seq_len(i-1)
if(isTRUE(all.equal(dimen, 1L))) { ## rows
out <- x[-ind, ]
} else if(isTRUE(all.equal(dimen, 2L))) { ## cols
out <- x[, -ind]
} else {
stop("Only for 2d objects")
}
out
}
> give(A, 3)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 2 3 4 5 6 7 8
[2,] 1 2 3 4 5 6 7 8
[3,] 1 2 3 4 5 6 7 8
> give(A, 3, dimen = 2)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 3 4 5 6 7 8
[2,] 3 4 5 6 7 8
[3,] 3 4 5 6 7 8
[4,] 3 4 5 6 7 8
[5,] 3 4 5 6 7 8
发布于 2018-06-15 12:06:38
您可以使用以下指令:
A[, 3:length(A[, 1])]
https://stackoverflow.com/questions/7500644
复制相似问题