Изменить фрейм данных, если записи дублируются с другим фреймом данных

У меня есть два фрейма данных и два столбца идентификаторов, теперь я хочу проверить, доступен ли id1 в df1 в df2 id2, новый столбец mutate для дублирования существует, но мой код не работает, что я делаю неправильно ..??

также я даю пользователю входной параметр, чтобы указать имена столбцов для проверки

df1 <-  data.frame(ID1= c("EMT1","EMT2","EMT3","EMT4","EMT5","EMT6","EMT7","EMT8","EMT9","EMT10","EMT11","EMT12","EMT13","EMT14","EMT15","EMT16","EMT17","EMT18","EMT19","EMT20","EMT21","EMT22","EMT23","EMT24","EMT25","EMT25","EMT27"))
df2 <-  data.frame(ID2= c("EMT10","EMT10","EMT10","EMT8","EMT8","EMT8","EMT6","EMT10","EMT6","","EMT6","EMT6","EMT5","EMT5","EMT5","EMT5","EMT5","EMT5","EMT5","EMT4","EMT4","EMT4","EMT4","EMT23","EMT32","EMT241","EMT51"))

empid_new = "ID1"
empid_old = "ID2"


uniqu_emp <- df2 %>% select(empid_old) %>% distinct()
df1 <- df1 %>% mutate(`dupe id` = ifelse((df1[[empid_new]] %in% uniqu_emp)== TRUE, "duplicate exist",""))


Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы используете dplyr, вы можете ссылаться на фрейм данных с помощью .data.

distinct возвращает фрейм данных для сравнения с %in% вам нужен вектор.

library(dplyr)
uniqu_emp <- df2 %>% distinct(.data[[empid_old]]) %>% pull()

df1 %>% 
   mutate(`dupe id` = ifelse(.data[[empid_new]] %in% uniqu_emp, 
                       "duplicate exist",""))

#     ID1         dupe id
#1   EMT1                
#2   EMT2                
#3   EMT3                
#4   EMT4 duplicate exist
#5   EMT5 duplicate exist
#6   EMT6 duplicate exist
#7   EMT7                
#8   EMT8 duplicate exist
#9   EMT9                
#10 EMT10 duplicate exist
#11 EMT11                
#12 EMT12   
#....             
#....

если первая ячейка моего df1 всегда будет пустой, тогда с этим возникнут какие-либо проблемы ...? я спрашиваю об этом, потому что в моем исходном фрейме данных это все еще не работает, я проверил все, например, пробел и т. д., все в порядке, только дело в том, что моя первая ячейка пуста (NA) в DF1

user14176250 24.12.2020 13:31

Я не думаю, что что-то изменится, если первое значение будет NA или пустым. Это должно работать так же. Вы присвоили результат обратно данным df1 <- df1 %>% mutate(`dupe id`....? Кроме того, что вы подразумеваете под не работает? Любое сообщение об ошибке или неправильный вывод? Работает ли он должным образом для данных, которыми вы поделились?

Ronak Shah 24.12.2020 14:09

да, я возвращаю результат к данным. на самом деле не показывает никаких ошибок, но столбец mutate отображается как пустой, не показывая никаких дубликатов. что может быть причиной, я также проверил, что класс (персонаж) такой же

user14176250 24.12.2020 14:15

Проверьте, есть ли пробелы. Сделайте df1[] <- lapply(df1, trimws) и df2[] <- lapply(df2, trimws), чтобы удалить их, и повторите попытку. Можете ли вы привести пример, где мы можем воспроизвести эту ошибку?

Ronak Shah 24.12.2020 14:19

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

user14176250 24.12.2020 14:26

Работает ли ответ так, как ожидалось, для общего примера?

Ronak Shah 24.12.2020 14:27

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

user14176250 24.12.2020 14:38

Хм... не уверен в этом. Может быть, если вы поделитесь некоторыми строками вашего фактического набора данных, на которых мы сможем воспроизвести неправильные результаты, это будет полезно для отладки.

Ronak Shah 24.12.2020 14:42

Другие вопросы по теме