Существует ли функция R для выбора общих значений 2-го кадра данных? - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь выбрать общие значения двух фреймов данных.У меня есть big_df и small_df

. Я пытаюсь получить фрейм данных, в котором только значения «ID» являются общими для обоих фреймов данных, и мне интересно только сохранить big_df, а не small_df.из них.

library(dplyr)
df3 <- merge(big_df, small_df, by =("ID"))

> df3
  ID Age Name Colour
1  1  21    a   blue
2  4  20    d  green
3  8  87    h    red
4  9   9    i  black
big_df <- data.frame("ID" = 1:10, "Age" = c(21,15,1,20,34,45,67,87,9,77), "Name" = c("a","b","c","d","e","f","g","h","i","l"))


> big_df
   ID Age Name
1   1  21    a
2   2  15    b
3   3   1    c
4   4  20    d
5   5  34    e
6   6  45    f
7   7  67    g
8   8  87    h
9   9   9    i
10 10  77    l

small_df <- data.frame("ID" = c(1,4,8,9), "Colour" = c("blue","green","red","black"))


> small_df
  ID Colour
1  1   blue
2  4  green
3  8    red
4  9  black

Я хотел бы получить вместо этого информацию о цвете

> df3
  ID Age Name 
1  1  21    a   
2  4  20    d  
3  8  87    h   
4  9   9    i  

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

dplyr semi_join() предназначался именно для этого

big_df <- data.frame("ID" = 1:10, "Age" = c(21,15,1,20,34,45,67,87,9,77), "Name" = c("a","b","c","d","e","f","g","h","i","l"))
small_df <- data.frame("ID" = c(1,4,8,9), "Colour" = c("blue","green","red","black"))

library(dplyr)
semi_join(big_df,small_df,by='ID')
# 
#   ID Age Name
# 1  1  21    a
# 2  4  20    d
# 3  8  87    h
# 4  9   9    i
1 голос
/ 12 июня 2019

У меня такое чувство, что тебе действительно нужно:

#check which big IDs exist in small IDs and subset
big_df[big_df$ID %in% unique(small_df$ID), ]
# ID Age Name
#1  1  21    a
#4  4  20    d
#8  8  87    h
#9  9   9    i

Итак, я не думаю, что вам нужно объединение в этом случае.

...