데이터 프레임 병합 : 요인에 새 수준을 추가하고 새로 추가 된 요인에 값을 일치시킵니다.

다니엘

다음 데이터 프레임이 있습니다.

df1<- data.frame( year= c(rep("2009", 8), rep("2010", 8)), 
                 elev_cat= c(rep("low",4), rep("high",4), rep("low",4), rep("high",4)), 
                 clim_var=c(rep("ppt", 2),rep("tmax", 2), rep("ppt", 2),rep("tmax", 2), rep("ppt", 2),rep("tmax", 2), rep("ppt", 2),rep("tmax", 2)),
                       div_var=c("lep_div", "psit_div", "lep_div", "psit_div", "lep_div", "psit_div","lep_div", "psit_div", "lep_div", "psit_div", "lep_div", "psit_div", "lep_div", "psit_div","lep_div", "psit_div"),
                       div_value=c(5,4,3,2, 5,4,3,2, 8,9,10,11, 8,9,10,11), 
                       clim_value=c(1.5, 1.5, 3.7, 3.7, 3.4, 3.4, 2.5, 2.5,2.1,2.1,3.1,3.1,4,4,5,5 ))


df2<- data.frame(year=c(rep("2009",4), rep("2010", 4)), 
                     elev_cat= rep(c("low", "high"), 4), 
                     clim_var=rep(c("anom1", "anom1", "anom2", "anom2"),2), 
                     clim_value=c(1,2,3.4, 5, 2.17, 3.7, 8.9, 4.5))

df1및 고도 카테고리에 div_value대한 다양한 수준의 다양성 값 포함합니다 . 다양성 값은 주어진 수준에 대한 일정하게 유지 , . 기후 변수는로 표시됩니다 . 에 해당하는 변수 . 연간 기후 평균은 각 .div_catyearelev_catyearelev_catdiv_catclim_varclim_varclim_valueyearelevation

내가 추가 할 df2df1. df2각각에 대한 추가 기후 변수가 year있으며 elev_cat, 이러한 값은의 각 수준 div_cat및 해당 수준에 대해 반복되는 방식으로 추가되어야 합니다 div_value.

나는 시도했다 :

ex<- merge(df1, df2, by=c("year","elev_cat"))

그러나 이것은 df2정보를 열 (예 : clim_var.yclim_var.x) 추가합니다 .

예상 결과 데이터 프레임은 다음과 같이 나타납니다.

expected_result<- data.frame( year= c(rep("2009", 16), rep("2010", 16)), 
                          elev_cat= rep(c("low", "low", "high", "high"),8), 
                          clim_var=c(rep("ppt", 4),rep("tmax", 4), rep("anom1", 4),rep("anom2", 4),rep("ppt", 4),rep("tmax", 4), rep("anom1", 4),rep("anom2", 4)), 
                          div_var=rep(c("lep_div", "psit_div", "lep_div", "psit_div"), 8),
                          div_value=c(rep(c(5,4,3,2),4), rep(c(8,9,10,11),4)), 
                          clim_value=c(1.5, 1.5, 3.7,3.7,3.4,3.4,2.5,2.5,1,1,2,2,
                                 3.4, 3.4, 5, 5,2.17,2.17,3.7,3.7, 8.9,8.9,
                                 4.5,4.5,2.1,2.1,3.1,3.1,4,4,5,5))
Akrun

우리가 할 수 있음 group_split오버 'div_var', 루프에 의해 list바인드 'DF2'데이터 세트의, 다음, 'elev_cat'과 '년'으로 그룹을 fill열 'div_var', 'div_value'이전 비와의 NA NA 값

library(dplyr)
library(purrr)
library(tidyr)
df1 %>%
    group_split(div_var) %>%
    map_dfr(~ bind_rows(., df2)  %>% 
    group_by(year, elev_cat) %>% 
    fill(div_var, div_value)) %>%
    ungroup

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관