데이터 프레임 필터링

아직도 R의 기본 기능을 배우고 있습니다. 하위 집합 함수는 여러 조건이 있거나없는 단일 열을 기반으로 조건을 필터링하는 것 같습니다.

데이터 프레임에서 데이터를 쉽게 필터링하려면 어떻게해야합니까?

  1. 여러 조건이 제공 될 때

  2. 사용 가능한 열에 조건을 적용해야하는 경우

예 : 주어진 데이터 프레임

name    D1      D2     D3      D4
julius  "A"     "A"    "B"     "B"
cate    "D"     "E"     "A"     "C"
karo    "A"     "D"     "C"     "E"

이 데이터 프레임을 필터링하여 D1 ~ D4 중 하나가 ‘E’인 이름 만 있으면되도록해야한다고 말하십시오.

name    D1      D2     D3      D4
cate    "D"     "E"     "A"     "C"
karo    "A"     "D"     "C"     "E"

D1이 큰 열 목록이 될 수 있다고 가정하십시오.이 필터를 수행하는 데 권장되는 방법은 무엇입니까? 감사합니다



답변

서브 세트 함수 에서 여러 필터를 결합 하려면 논리 연산자를 사용하십시오.

 subset(data, D1 == "E" | D2 == "E")

D1 열 또는 D2 열에 “E”값이있는 행을 선택합니다. 사용 가능한 논리 연산자에 대한 도움말 페이지를보십시오.

 > ?"|"

두 번째 질문은 행을 필터링하는 것입니다. 이것은 다음과 같은 방법으로 달성 할 수 있습니다

 collist <- c("D1","D2","D3","D4")
 sel <- apply(data[,collist],1,function(row) "E" %in% row)
 data[sel,]

적용 할 첫 번째 인수 는 필터링해야하는 열을 가정합니다. 두 번째 인수는 1이며, 데이터 행을 반복한다는 의미입니다. 세 번째 인수는 이름이없는 한 줄 함수로 , “E”가 행에 있으면 TRUE 를 반환 하고 “E”가 없으면 FALSE를 반환합니다.

apply 함수의 결과는 데이터의 행 수와 길이가 같은 논리 형 벡터 sel 입니다. 그런 다음이 벡터를 사용하여 필요한 행을 선택합니다.

최신 정보

grep을 사용하여 동일한 작업을 수행 할 수 있습니다.

sel <- apply(data[,collist],1,function(row) length(grep("E",row))>0)

기본 인수가 있는 R grep 에서 제공된 벡터에서 일치하는 패턴을 가진 요소 수를 반환합니다.


답변


이 글은 stats 카테고리에 분류되었고 태그가 있으며 님에 의해 에 작성되었습니다.