2013-04-05 3 views
0

"id"와 "value"및 행 수가 각각 2 개의 열이있는 6 개의 데이터 프레임이 있습니다. 그들은 표시되어 P1, P2 .... P6이문자 벡터 값을 기반으로 R의 여러 데이터 프레임에 서브 셋팅

id   value_p1 
Jane C  9.713457e-01 
Claire K 1.260160e-01 
Brett F  4.933005e-0 
Jen S  0.56 

처럼 지금 ID_라는 6 개 데이터 세트에서 이름의 교차를 포함하는 문자 벡터가 교차 :

c("Jane C", "Claire K","Brett F") 

이제 id_intersect를 포함하고 각 데이터 프레임에서 교차 ID에 대한 값을 유지하는 각 데이터 프레임의 섹션 만 포함하는 새 데이터 프레임을 만들려고합니다.

id   value_p1  value_p2.............value_p6 
Jane C  9.713457e-01 0.87     .098 
Claire K 1.260160e-01 0.89     .005 
Brett F  4.933005e-0 0.002    .035 

저는이 문제에 정말 열중하고 있습니다. 감사합니다. .

+0

귀하의 질문하지 [재현] (http://stackoverflow.com/questions/5963269/how-to-make-a -great-r-reproducible-example)을 사용하면 어려울 수 있습니다. 'rbind' 또는'merge' 또는 다른 관련 함수를 통해 하나의 객체에 모든 data.frames를 가져오고 싶을 것 같은데요. 그러면 데이터를 한 번만 서브 세트 할 수 있습니다. – Chase

답변

2

당신은 merge 여기 여기

ll <- list(p1,p2,...,p6) 
Reduce(merge,ll) ## 

재 생산 가능한 예를 Reduce를 사용할 수 있습니다. 우선은

ll <- lapply(1:6, function(x) { 
    id <- c(letters[1:3],letters[3+x]) 
    dat <- data.frame(id=id, value=rnorm(4)) 
    names(dat) <- c('id',paste('value',x,sep='_')) 
    dat 

}) 

그런 다음 목록에서 데이터 프레임을 생성

Reduce(merge,ll) 
     id  value_1  value_2 value_3 value_4  value_5 value_6 
1 Brett F -0.09242725 -0.03908275 0.5366957 0.4926749 0.830829230 1.4868564 
2 Claire K -0.27487913 -0.13733120 -0.2708968 0.1720550 -0.003194644 -0.6328486 
3 Jane C -1.56306487 -0.75655434 0.1806619 0.2482159 -1.075606294 1.9711559 
+0

와우, 고맙습니다. 2 시간 동안 코드를 찾아 보니 해결되었습니다. 정말 고맙습니다!! – CadisEtRama

+0

아무쪼 락. 다음에 재현 할 수있는 예제를 넣으십시오. @Chase commment – agstudy

+0

+1의 링크를 읽고 마음을 읽으십시오. – Chase

관련 문제