2017-12-01 10 views
-7

오히려 다른 행 값을 찾기 위해 행에 의해 여러 열을 일치하는 방법 :두 dataframes :이 같은 루프 중첩을하는 것보다

나는 것 같은 느낌
for (rowAll in 1:nrow(groupDataUnadjusted)) { 
     year <- groupDataUnadjusted[rowAll, "year"] 
     income <- groupDataUnadjusted[rowAll, "income_group"] 
     joint <- groupDataUnadjusted[rowAll, "Joint"] 
     child <- groupDataUnadjusted[rowAll, "children"] 

     for (rowPuf in 1:nrow(nationalPuf)) { 
     yearPuf <- nationalPuf[rowPuf, "year"] 
     incomePuf <- nationalPuf[rowPuf, "income_group"] 
     jointPuf <- nationalPuf[rowPuf, "Joint"] 
     childPuf <- nationalPuf[rowPuf, "children"] 

     if ((year == yearPuf) && (income == incomePuf) && (joint == jointPuf) && (child == childPuf)) { 
      groupDataUnadjusted[rowAll, 'tax_difference_pct'] <- groupDataUnadjusted[rowAll, 'tax_difference_pct'] + nationalPuf[rowPuf, 'diff'] 
      break 
     } 
     } 
    } 
    groupDataAdjusted <- groupDataUnadjusted 

는 해당를 찾을 수있는 빠른 방법이 있어야합니다 두 데이터 프레임 사이의 행 나는 데이터 프레임과 다른 길이를 가져 와서 3 개의 열이 어디에 있는지 찾는 것으로 매치됩니다. 그들이 동일하면, 그 행이 그들 사이에 일치하는 것을 압니다. 그런 다음 해당 행에서 하나의 값을 가져 와서 다른 데이터 프레임의 값에 추가합니다.

그러나 R.에 더 나은 방법이있을

+4

예제 데이터를 보내주십시오. – CCurtis

+0

@ 필수 그것은 필요하지 않습니다. 이것은 일반적인 경우입니다. –

+0

예제가 없으면 실제로 대답을 기대할 수 없습니다. 대답은 대개 상황에 따라 매우 다릅니다. – zacdav

답변

1

당신은 아마 일치

library(dplyr) 
groupDataAdjusted <- left_join(groupDataUnadjusted, nationalPuf, by = c("year", "income_group","Joint","children") %>% 
          mutate(tax_difference_pct = tax_difference_pct + diff) 
모든 행하거나 사람을 유지하려는 경우

가 따라 dplyr에서 기능을 결합 사용할 수 있습니다

재현성있는 데이터를 제공하지 않았으므로 테스트되지 않았지만 아이디어를 제공해야합니다.

이 사용자가 지정할 필요가 없습니다 만 일치하는 열 이름이

"에 의해"또는 모든 행을 유지하는 FULL_JOIN 사용하는 경우

이의 두번째 페이지의 오른쪽 상단 참조 : https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

+0

DF의 길이가 다릅니다. –

+2

길이가 다른 경우 문제가되지 않습니다. – zacdav

+3

다른 길이는 조인에서 중요하지 않습니다. 이 다음 원하는 출력을 제공하지 않는 경우 원하는 출력을 더 잘 설명하기 위해 예제 데이터가 필요합니다. – user2738526