조건을 충족하는 행렬의 행 선택
행렬이 있는 R에서:
one two three four
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 11 18
[4,] 4 9 11 19
[5,] 5 10 15 20
행이 3열 = 11인 하위 행렬을 추출하려고 합니다.즉, 다음과 같습니다.
one two three four
[1,] 1 6 11 16
[3,] 3 8 11 18
[4,] 4 9 11 19
저는 이것을 반복하지 않고 하고 싶습니다.저는 R이 처음이라 이것은 매우 분명하지만 문서는 종종 다소 조잡합니다.
as.data.frame()을 사용하여 행렬을 데이터 프레임으로 변환하는 경우 이 작업이 더 쉽습니다.이 경우 이전 답변(부분 집합 또는 m$3 사용)이 작동하고 그렇지 않으면 작동하지 않습니다.
행렬에 대한 작업을 수행하려면 이름으로 열을 정의할 수 있습니다.
m[m[, "three"] == 11,]
또는 번호별:
m[m[,3] == 11,]
하나의 행만 일치하는 경우 결과는 행렬이 아닌 정수 벡터입니다.
dplyr 패키지를 이용하여 간단한 방법을 선택하겠습니다.
데이터 프레임이 데이터인 경우.
library(dplyr)
result <- filter(data, three == 11)
m <- matrix(1:20, ncol = 4)
colnames(m) <- letters[1:4]
다음 명령은 위 행렬의 첫 번째 행을 선택합니다.
subset(m, m[,4] == 16)
그러면 마지막 세 개가 선택됩니다.
subset(m, m[,4] > 17)
두 경우 모두 결과는 행렬이 됩니다.열 이름을 사용하여 열을 선택하려면 데이터 프레임으로 변환하는 것이 가장 좋습니다.
mf <- data.frame(m)
그런 다음 선택할 수 있습니다.
mf[ mf$a == 16, ]
또는 subset 명령을 사용할 수 있습니다.
서브셋은 매우 느린 기능이고, 저는 개인적으로 그것이 쓸모없다고 생각합니다.
데이터.프레임, 배열, 행렬이 있다고 가정합니다.Mat와 함께A,B,C열 이름으로 사용할 수 있습니다.
하나의 열에 하나의 조건이 있는 경우, 열 A가
Mat[which(Mat[,'A'] == 10), ]
서로 다른 열에 여러 조건이 있는 경우 더미 변수를 생성할 수 있습니다.조건이 다음과 같다고 가정합니다.A = 10,B = 5,그리고.C > 2그러면 다음과 같습니다.
aux = which(Mat[,'A'] == 10)
aux = aux[which(Mat[aux,'B'] == 5)]
aux = aux[which(Mat[aux,'C'] > 2)]
Mat[aux, ]
다음을 사용하여 속도 이점을 테스트합니다.system.time,그which방법은 보다 10배 더 빠릅니다.subset방법.
행렬이 호출되는 경우m그냥 사용:
R> m[m$three == 11, ]
데이터 집합을 데이터라고 하면 모든 행이 열 값 'pm2' 조건을 충족합니다.5' > 300은 -에 의해 수신될 수 있습니다.
data ['pm2.5'] >300,]
언급URL : https://stackoverflow.com/questions/5391124/select-rows-of-a-matrix-that-meet-a-condition
'itsource' 카테고리의 다른 글
| 오류: nodejs의 첫 번째 인증서를 확인할 수 없습니다. (0) | 2023.06.06 |
|---|---|
| 안드로이드에서 '콘텍스트'를 얻는 정적인 방법? (0) | 2023.06.06 |
| 가져오기 오류: dateutil.parser라는 모듈이 없습니다. (0) | 2023.06.06 |
| dplyr에 가입할 때 x와 y에 대한 열 이름을 지정하는 방법은 무엇입니까? (0) | 2023.06.06 |
| 안드로이드에서 의도한 추가 데이터를 얻으려면 어떻게 해야 합니까? (0) | 2023.06.06 |