2013-10-20 4 views
9

루프를 사용하여 여러 요인 수준에 따라 데이터 프레임의 하위 집합을 피할 수있는 방법은 무엇입니까?데이터 프레임을 여러 요소 수준으로 나누십시오.

다음 예제에서 원하는 출력은 데이터 프레임입니다. 데이터 프레임은 "코드"의 값이 "selected"의 값 중 하나와 동일한 원래 데이터 프레임의 행을 포함해야합니다.

작업 예 :

#sample data 
Code<-c("A","B","C","D","C","D","A","A") 
Value<-c(1, 2, 3, 4, 1, 2, 3, 4) 
data<-data.frame(cbind(Code, Value)) 

selected<-c("A","B") #want rows that contain A and B 

#Begin subsetting 
result<-data[which(data$Code==selected[1]),] 
s1<-2 
while(s1<length(selected)+1) 
{ 
    result<-rbind(result,data[which(data$Code==selected[s1]),]) 
    s1<-s1+1 
} 

이는 더 큰 데이터 세트의 장난감 예이므로, "선택된"데이터 요소 행의 다수의 다수를 포함 할 수있다. 따라서 루프를 피하고 싶습니다.

답변

24

당신은 %in%

data[data$Code %in% selected,] 
    Code Value 
1 A  1 
2 B  2 
7 A  3 
8 A  4 
4

이 시도 :

> data[match(as.character(data$Code), selected, nomatch = FALSE), ] 
    Code Value 
1  A  1 
2  B  2 
1.1 A  1 
1.2 A  1 
2

을 사용할 수 있습니다 여기에 또 다른입니다 :

data[data$Code == "A" | data$Code == "B", ] 

또한 부분 집합의 요소가 일부가 될 필요가 없습니다 언급 할 가치가 길이 및 순서로 데이터 프레임 행과 일치하는 경우 데이터 프레임의 이 경우 우리는 어쨌든이 요인으로부터 데이터 프레임을 만들었습니다. 그래서,

data[Code == "A" | Code == "B", ] 

도 작동, R.

에 대한 정말 유용한 것들 중 하나입니다
관련 문제