답변:
as.data.frame ()을 사용하여 행렬을 데이터 프레임으로 변환하면 더 쉽습니다. 이 경우 이전 답변 (서브셋 또는 m $ three 사용)이 작동하지만 그렇지 않으면 작동하지 않습니다.
행렬 에서 작업을 수행하기 위해 이름별로 열을 정의 할 수 있습니다.
m[m[, "three"] == 11,]
또는 숫자로 :
m[m[,3] == 11,]
하나의 행만 일치하면 결과는 행렬이 아니라 정수 벡터입니다.
m[m[,3] == 11,,drop=FALSE]
df <- df[!which(df$ARID3A:df$YY1 == "U"),]
, 여기에서는 열 범위 (ARID3A : YY1)에 U 값이 포함 된 df에서 해당 행을 제거하려고합니다 .
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
방법.
[ ]
답변 사이 에 코드를 실행하면 더 명확하게 볼 수 있습니다.