벡터/매트릭스 끝까지 우아한 인덱싱
R에서 모든 지수를 위치에서 원하는 것으로 말할 수 있습니까?i
벡터/matrix의 끝까지?세 번째 열부터 서브매트릭스를 원한다고 하세요.저는 현재 이 방법만 알고 있습니다.
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:...]
)?
때때로 당신이 원하지 않는 것을 R에게 말하는 것이 더 쉽습니다.즉, 음의 색인을 사용하여 행렬에서 열을 제외합니다.
다음은 두 가지 방법으로 동일한 결과를 얻을 수 있습니다.
A[, -(1:2)]
A[, -seq_len(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
하지만 질문에 답하려면 다음을 사용합니다.ncol
열의 개수를 찾습니다.(유사하게 다음과 같습니다.nrow
행 수를 찾습니다.)
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
행의 경우(예에 따라 열이 아닌 경우)head()
그리고.tail()
활용할 수 있습니다.
A <- matrix(rep(1:8, each = 5), nrow = 5)
tail(A, 3)
와 거의 같습니다.
A[3:dim(A)[1],]
(이름/인쇄된 indices이 모두 다릅니다.)
벡터와 데이터 프레임에서도 작동합니다.
> 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
다음 명령을 사용할 수 있습니다.
A[, 3:length(A[, 1])]
동일한 것에 대해 적용자가 읽을 수 있는 갱신된 접근 방식:
A %>% as_tibble() %>%
select(-c(V1,V2))
A %>% as_tibble() %>%
select(V3:ncol(A))
언급URL : https://stackoverflow.com/questions/7500644/elegant-indexing-up-to-end-of-vector-matrix
'programing' 카테고리의 다른 글
glibc 사용 여부를 구분하는 방법 (0) | 2023.10.19 |
---|---|
사용자 지정 게시글 메타 저장, 데이터 저장 안 함 (0) | 2023.10.19 |
PowerShell 스크립트에서 특정 기능을 "비공개"로 만들 수 있는 방법이 있습니까? (0) | 2023.10.19 |
필터 또는 후크를 사용하여 카트 총량 수정 (0) | 2023.10.19 |
php, 특수문자를 텍스트로 변환하는 방법은? (0) | 2023.10.19 |