使用条件创建新变量到不同数据框中的另一个变量
Creating a new variable using conditional to another variable in a different dataframe
我有以下数据框
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)
}
但这行不通。有办法吗?
使用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
我有以下数据框
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)
}
但这行不通。有办法吗?
使用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