2017-10-09 5 views
-1
set.seed(3) 
mydata <- data.frame(id = c(1:5), 
      score = c(rnorm(5, 0, 1))) 
ids <- c(1, 2, 3, 3) 
> subset(mydata, id %in% ids) 
    id  score 
1 1 -0.9619334 
2 2 -0.2925257 
3 3 0.2587882 

의 중복 행 서브 세트를하는 방법에 대해 설명합니다. 캐치는 내 ids에 번호 3을 두 번 반복한다는 의미입니다. 하지만 subset은 유일한 행을 추출한 것 같습니다. 나는 연산자 %in%으로 추측하고 있습니다. 그러나 원하는 출력은R : 내가 그 <code>id</code> 내 <code>ids</code> 일치하는지 <code>mydata</code> 등의 모든 행 서브 세트를하고 싶은 상황이 data.frame

> subset(mydata, id %in% ids) 
     id  score 
    1 1 -0.9619334 
    2 2 -0.2925257 
    3 3 0.2587882 
    4 3 0.2587882 

나는 또한 == 연산자를 사용하려고했습니다. 그러나 그 트릭을하지 않는 것 같았다.

+0

예제 데이터 프레임에는 중복 행이 포함되어 있지 않습니다. 당신의'ids'가 당신의'mydata'와 어떤 관계가 있다면 당신은 그것을 명확하게 할 필요가 있습니다. 그들은 같은 규칙을 가지고 있지 않습니다. 어떤 규칙에 따라 그들을 연관 시키시겠습니까? –

+0

'mydata'에는 중복 행이 없습니다. 맞습니다. 나는 단지'data.frame'을'ids'에 대응하는 행으로 생성 할 수 있기를 원합니다. 그래서'ids '가'c (1, 1, 2, 2, 2)'라면 원하는'data.frame'은'mydata'의 첫 번째와 두 번째 행을 각각 3 번 반복해야합니다. – Adrian

+1

그래서'ids'는'mydata'와 같은 길이입니까? 그렇다면 –

답변

1

오히려 %in%를 사용하는 것보다, 그것은이 중복 된 ID를 반환 자매 기능을 match()

mydata[match(ids, mydata$id), ] 

있어 사용해보십시오.