itsource

조건을 충족하는 행렬의 행 선택

mycopycode 2023. 6. 6. 08:21
반응형

조건을 충족하는 행렬의 행 선택

행렬이 있는 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

반응형