我有一个与下面类似的数据框。
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
任何帮助将不胜感激。
答案 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)