행렬이있는 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.time
의 which
방법은 빠른 것보다 10 배입니다 subset
방법.
답변
행렬이 호출 m
되면 다음을 사용하십시오.
R> m[m$three == 11, ]
답변
데이터 세트를 data라고하면 모든 행이 ‘pm2.5’> 300 열 값을 수신 할 수있는 조건을 충족합니다.
데이터 [data [ ‘pm2.5’]> 300,]