我有以下数据框
df1:
round mun1 mun2
1 SP PA
1 RJ PR
1 BH BA
2 BA SP
2 PR BH
2 PA RJ
3 RJ BH
3 PA PR
3 SP BA
df2:
mun p01 p02 p03
SP 3 4 7
RJ 0 3 4
BH 3 6 9
BA 0 1 1
PA 1 2 3
PR 1 4 5
我需要在df1中添加一列P,如果round == 1则等于0,如果round == 2则等于p01的最大值,如果round == 3则等于p02的最大值。
在实际数据中,在df1中,我有38条回合和380行,在df2中,我有20行(每条都代表唯一的mun)。我尝试了以下循环:
p <-matrix(0, nrow=380,ncol=1)
for(i in 2:38){
p <- if(round==i) max(p[[i-1]] %in% df2)
}
但这不起作用。有办法吗?
答案 0 :(得分:2)
使用dplyr
。如果您可以基于mun1或mun2和mun合并df1和df2,则它将起作用。
df %>%
left_join(df2, by = c("mun1" = "mun")) %>% #Merging the data
mutate(P = ifelse(round == 1, 0, #Applying the condition
ifelse(round == 2, max(p01),
ifelse(round == 3, max(p02), NA))))
round mun1 mun2 p01 p02 p03 P
1 1 SP PA 3 4 7 0
2 1 RJ PR 0 3 4 0
3 1 BH BA 3 6 9 0
4 2 BA SP 0 1 1 3
5 2 PR BH 1 4 5 3
6 2 PA RJ 1 2 3 3
7 3 RJ BH 0 3 4 6
8 3 PA PR 1 2 3 6
9 3 SP BA 3 4 7 6