rbind строки данных с общими идентификаторами - PullRequest
0 голосов
/ 18 ноября 2018
df1 <- read.table(
  text = "ID   A    B    C
    1    0    0    0
    1    1    0    1
    3    1    1    1", header = T
)

df2 <- read.table(
  text = "ID   A    B    C
    1    49   49   32
    8    2    9    3
    9    4    2    0", header = T
)

Результат

ID   A    B    C
1    0    0    0
1    1    0    1
1    49   49   32

Мне нужно создать кадр данных, состоящий из всех столбцов исходных кадров данных (они уже состоят из одинаковых столбцов), где оба исходных кадра данных имеют некоторые идентификаторы, которыеобщий.В этом примере оба df1 и df2 имеют строки с идентификаторами, равными 1, поэтому результирующий информационный кадр содержит все строки из обоих информационных кадров, в которых идентификаторы имеют значение 1.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Вот вариант с tidyverse

library(tidyverse)
list(df1, df2) %>% 
    bind_rows(.id = 'grp') %>% 
    group_by(ID) %>% 
    filter(n_distinct(grp) > 1) %>% 
    select(-grp)
# A tibble: 3 x 4
# Groups:   ID [1]
#     ID     A     B     C
#  <int> <int> <int> <int>
#1     1     0     0     0
#2     1     1     0     1
#3     1    49    49    32
0 голосов
/ 18 ноября 2018

Сначала вы получаете общие ID с использованием intersect, а затем подмножество и rbind оба кадра данных -

valid_ids <- intersect(df1$ID, df2$ID)

rbind(df1[df1$ID %in% valid_ids, ], df2[df2$ID %in% valid_ids, ])

  ID  A  B  C
1  1  0  0  0
2  1  1  0  1
3  1 49 49 32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...