[r] 조건을 만족하는 행렬의 행을 선택하십시오.

행렬이있는 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 $ three 사용)이 작동하지만 그렇지 않으면 작동하지 않습니다.

행렬 에서 작업을 수행하기 위해 이름별로 열을 정의 할 수 있습니다.

m[m[, "three"] == 11,]

또는 숫자로 :

m[m[,3] == 11,]

하나의 행만 일치하면 결과는 행렬이 아니라 정수 벡터입니다.


답변

m <- matrix(1:20, ncol = 4)
colnames(m) <- letters[1:4]

다음 명령은 위의 행렬의 첫 번째 행을 선택합니다.

subset(m, m[,4] == 16)

마지막 3 개를 선택합니다.

subset(m, m[,4] > 17)

결과는 두 경우 모두 행렬이됩니다. 열 이름을 사용하여 열을 선택하려면 다음을 사용하여 열을 데이터 프레임으로 변환하는 것이 가장 좋습니다.

mf <- data.frame(m)

그런 다음

mf[ mf$a == 16, ]

또는 subset 명령을 사용할 수 있습니다.


답변

dplyr 패키지를 사용하여 간단한 접근 방식을 선택하겠습니다.

데이터 프레임이 데이터 인 경우

library(dplyr)
result <- filter(data, three == 11)


답변

하위 집합은 매우 느린 기능이며 개인적으로 쓸모가 없습니다.

난 당신이 data.frame, 배열,라는 행렬이 가정 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.timewhich방법은 빠른 것보다 10 배입니다 subset방법.


답변

행렬이 호출 m되면 다음을 사용하십시오.

R> m[m$three == 11, ]


답변

데이터 세트를 data라고하면 모든 행이 ‘pm2.5’> 300 열 값을 수신 할 수있는 조건을 충족합니다.

데이터 [data [ ‘pm2.5’]> 300,]


답변