#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']