Как я могу соединить две таблицы по горизонтали и сопоставить 2 разных имени столбца в R? - PullRequest
0 голосов
/ 08 января 2020

У меня есть два кадра данных:

data1:

ID               DateTimeUTC
 A               12/4/2019 11:30:30 PM
 A               12/4/2019 11:30:31 PM
 B               12/5/2019 11:31:00 PM
 B               12/5/2019 11:31:01 PM
 C               12/5/2019 11:31:02 PM

и data2:

 Message         DateTimeUTC
 A               12/4/2019 11:30:30 PM
 A               12/4/2019 11:30:31 PM
 B               12/5/2019 11:31:00 PM
 B               12/5/2019 11:31:01 PM

Я хотел бы иметь

ID              DateTimeUTC               Message              DateTimeUTC
A               12/4/2019 11:30:30 PM      A           12/4/2019 11:30:30 PM
A               12/4/2019 11:30:31 PM      A           12/4/2019 11:30:31 PM
B               12/5/2019 11:31:00 PM      B           12/4/2019 11:31:00 PM
B               12/5/2019 11:31:01 PM      B           12/4/2019 11:31:01 PM

Я wi sh, чтобы показать только соответствующие идентификаторы и сообщения. Я выполнил внутреннее соединение, но оно дает мне дубликаты и стирает одно из имен моих столбцов.

 library('dplyr')
 inner_join(data1,  data2, by = c("ID" = "Message"))  

Цель: Кто-то может показать мне, как выполнить rbind, чтобы получить вышеуказанный результат?

##pseudo_code:
 rbind(data1,data2, order_by ID & Message)

Ответы [ 2 ]

1 голос
/ 08 января 2020

На самом деле идея inner_join верна, проблема в том, что вместо объединения только по «ID» = «Сообщение» вы также должны учитывать DateTimeUT C. Таким образом, это соединение на 2 условия следующим образом:

library(dplyr)

df1 <-
  data.frame(
    ID = c("A", "A", "B", "B", "C"),
    DateTimeUTC = c("12/4/2019 11:30:30 PM", "12/4/2019 11:30:31 PM", "12/5/2019 11:31:00 PM", 
                    "12/5/2019 11:31:01 PM", "12/5/2019 11:31:02 PM"),
    stringsAsFactors = FALSE
  )

df2 <-
  data.frame(
    Message = c("A", "A", "B", "B"),
    DateTimeUTC = c("12/4/2019 11:30:30 PM", "12/4/2019 11:30:31 PM", 
                    "12/5/2019 11:31:00 PM", "12/5/2019 11:31:01 PM"),
    stringsAsFactors = FALSE
  )

df1 %>%
  inner_join(df2, by = c("ID" = "Message", "DateTimeUTC" = "DateTimeUTC"))

# ID           DateTimeUTC
# A 12/4/2019 11:30:30 PM
# A 12/4/2019 11:30:31 PM
# B 12/5/2019 11:31:00 PM
# B 12/5/2019 11:31:01 PM
0 голосов
/ 08 января 2020

Если вы хотите связать эти два набора данных вместе, я бы использовал cbind.

Тем не менее, предостережение заключается в том, что предполагается, что данные в каждом наборе данных упорядочены правильно (т. Е. Первая буква «A» в данных1 фактически идет с первой буквой «A» в данных2).

library(tidyverse)

data1 <- tibble(ID = c("A", "A", "B", "B", "C"),
                    DateTimeUTC = c("12/4/2019 11:30:30 PM",
                                    "12/4/2019 11:30:31 PM",
                                    "12/5/2019 11:31:00 PM",
                                    "12/5/2019 11:31:01 PM",
                                    "12/5/2019 11:31:02 PM"))

data2 <- tibble(Message = c("A", "A", "B", "B"),
                    DateTimeUTC = c("12/4/2019 11:30:30 PM",
                                    "12/4/2019 11:30:31 PM",
                                    "12/5/2019 11:31:00 PM",
                                    "12/5/2019 11:31:01 PM"))
# remove 'C' from the list
data1 <- data1 %>% filter(ID != "C")

# bind datasets togethers as per example above.
data_bind <- cbind(data1, data2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...