다음 데이터 프레임이 있습니다.
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_cat
year
elev_cat
year
elev_cat
div_cat
clim_var
clim_var
clim_value
year
elevation
내가 추가 할 df2
에 df1
. df2
각각에 대한 추가 기후 변수가 year
있으며 elev_cat
, 이러한 값은의 각 수준 div_cat
및 해당 수준에 대해 반복되는 방식으로 추가되어야 합니다 div_value
.
나는 시도했다 :
ex<- merge(df1, df2, by=c("year","elev_cat"))
그러나 이것은 df2
정보를 열 (예 : clim_var.y
및 clim_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))
우리가 할 수 있음 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] 삭제
몇 마디 만하겠습니다