Как добавить новые столбцы в фрейм данных, если общие переменные найдены в нескольких других фреймах данных - PullRequest
0 голосов
/ 09 мая 2019

У меня есть фрейм данных, аналогичный приведенному ниже.

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

Я хотел бы добавить 1 или 0 к df1, если столбец df1 $ Class совпадает со столбцом $ Class трех других. Я хотел бы добавить 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 ]

2 голосов
/ 09 мая 2019

вы можете использовать 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 голос
/ 09 мая 2019

Простым решением было бы использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...