Создание переменной на основе равных значений двух фреймов данных - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть следующие два фрейма данных:

df1 <- data.frame(ID = c('hds23','has21','her10','hds21','hss23','has23'))

df2 <- data.frame(ID = c('hds23','her10','hds21'))

Я хотел бы, чтобы все идентификаторы на df2, находящиеся в df1, были помечены новой переменной в df1$Status как 'TA', а все остальные как 'NoTA'

Я пробовал ifelse(), но он дает следующие ошибки:

Warning message:
In LACoursesTable1$YearCourseSec == CourseTable$YearCourseSec :
longer object length is not a multiple of shorter object length

Это то, что я хотел бы df1выглядеть

ID       Status
hds23    TA
has21    NTA
her10    TA
hds21    TA
hss23    NTA
has23    NTA

1 Ответ

0 голосов
/ 04 февраля 2019

Вот два способа использования некоторых функций tidy :

library(tidyverse)

df1 <- data.frame(
  ID = c('hds23','has21','her10','hds21','hss23','has23')
)

df2 <- data.frame(
  ID = c('hds23','her10','hds21')
)


df1 <- df1 %>%
  mutate(
    Status = if_else(
      ID %in% df2$ID,
      'TA',
      'noTA'
    )
  )

df1 <- df1 %>% 
  semi_join(df2, by = 'ID') %>%
  mutate(Status = 'TA') %>% 
  bind_rows(
    df1 %>% 
      anti_join(df2, by = 'ID') %>% 
      mutate(Status = 'noTA')
  )

> df1
     ID Status
1 hds23     TA
2 her10     TA
3 hds21     TA
4 has21   noTA
5 hss23   noTA
6 has23   noTA
> 

В первом подходе используется условный if_else(<cond>, <true>, <false>), а во втором используются два отдельных объединения (semi_join для соответствующих элементов и anti_join для отсутствующих элементов), связанных вместе в строках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...