如果在多个其他数据框中发现了公共变量,如何将新列添加到数据框中

时间:2019-05-09 09:18:48

标签: r dataframe

我有一个与下面类似的数据框。

df1 <-
Class    Race    Level

Paladin  Human   4
Fighter  Elf     5
Wizard   Gnome   3
Rouge    Elf     4

我想根据以下三个数据帧中的信息在此数据帧中添加列。

Mission1 <-

Class    Exp 

Paladin  80
Fighter  70 
Cleric   100
Wizard   80

Mission2 <-

Class    Exp

Cleric   200
Fighter  220
Wizard   190

Boss1 <-

Class    Exp

Wizard   500
Paladin  520
Cleric   490
Druid    500

如果df1 $ Class列与其他三个的$ Class列匹配,我想向df1添加1或0。我想为其他三个数据帧分别添加1或0,以总结任务以及任务+老板得分。所以输出看起来像这样。

df2$Missions  = Mission1 + Mission2

df2$Final = Mission1 + Mission2 + Boss1
df2 <-

Class    Race    Level   Mission1   Mission2  Missions   Boss1   Final

Paladin  Human   4       1          0         1          1       2 
Fighter  Elf     5       1          1         2          0       2
Wizard   Gnome   3       1          1         2          1       3
Rouge    Elf     4       0          0         0          0       0

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用dplyr

df2 %>% mutate(Mission1 = as.integer(Class %in% Mission1$Class))
    %>% mutate(Mission2 = as.integer(Class %in% Mission2$Class))

df2 %>% mutate(Missions = Mission1 + Mission2)
df2 %>% mutate(Boss1 = as.integer(Class %in% Boss1$Class))
df2 %>% mutate(Final = Missions+Boss1)

答案 1 :(得分:1)

一个简单的解决方案是使用dplyr left_join,然后根据是否存在值将其更改为0和1:

df1 <- left_join(df1, Mission1)
names(df1)[4] <- "Mission1"
df1 <- left_join(df1, Mission2)
names(df1)[5] <- "Mission2"

df1$Mission1 <- ifelse(is.na(df1$Mission1), 0, 1)
df1$Mission2 <- ifelse(is.na(df1$Mission2), 0, 1)