Как удалить уникальные строки в двух фреймах данных в R?

#r

#r

Вопрос:

Вот фреймы данных, которые у меня есть:

 Symbols    Val
  AA        5
  AA        6
  BB        7
  BB        9 
  CC        8
  CC        7

Symbols    Val
  AA        2
  AA        34
  CC        41
  CC        1
  

Я собираюсь объединить два фрейма данных, но у первого есть еще данные в столбце символов. Как вы видите, «BB» уникальны по сравнению со вторым фреймом данных. Итак, мне нужно удалить две строки (BB) в первой.
Я знаю, как удалить в одном фрейме данных, а не в двух разных. Кто-нибудь знает, как это сделать?

Комментарии:

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

Ответ №1:

Мы можем получить intersect «Символы» ввода из обоих наборов данных и использовать subset их для возврата в первом наборе данных

 v1 <- intersect(df1$Symbols, df2$Symbols)
df1new <- subset(df1, Symbols %in% v1)
  

Ответ №2:

Если вы хотите объединить два набора данных, сложив их строки, вы можете использовать bind_rows() и filter(across()) оставить уникальные Symbol значения в каждом фрейме данных:

 library(tidyverse)

bind_rows(df1, df2) %>% 
  filter(across(Symbols, ~. %in% intersect(df1$Symbols, df2$Symbols)))

  Symbols val
1      AA   5
2      AA   6
3      CC   8
4      CC   7
5      AA   2
6      AA  34
7      CC  41
8      CC   1
  

Ответ №3:

Вы можете сохранить уникальные Symbols df2 и объединить два фрейма данных.

Это можно сделать с помощью dplyr

 library(dplyr)
df1 %>% inner_join(df2 %>% distinct(Symbols), by  ='Symbols')

#. Symbols Val
#1      AA   5
#2      AA   6
#3      CC   8
#4      CC   7
  

База R :

 merge(df1, data.frame(Symbols = unique(df2$Symbols)), by = 'Symbols')
  

и data.table

 library(data.table)
setDT(df1)
setDT(df2)
df1[unique(df2, by= 'Symbols')[, 1], on = 'Symbols']