使用不同数据框中的另一个变量的条件来创建新变量

时间:2018-11-10 22:32:30

标签: r dataframe conditional

我有以下数据框

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)
}

但这不起作用。有办法吗?

1 个答案:

答案 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