2016-12-16 54 views
1

我有一个有趣的连接,我需要在R中完成。所以这里是我的两个表格。R:加入表格其中t1.key1 = t2.key1和t2.key2部分匹配t2.key2

表数1:

Date       Name 
2016-01-02 10:18:00   CARDOSO, RAMON 
2016-01-02 15:02:00   HARRISON, KATHYANNE M 
2016-01-02 15:02:00   PALEO, SHERI 
2016-01-03 02:09:00   PHANOR, RENALDY 
2016-01-03 09:42:00   GUAMAN, ANGEL 
2016-01-03 18:47:00   AIME, MADELINE 
2016-01-03 18:47:00   CADET, GARDY 
2016-01-03 19:31:00   REID, ARTHUR D 
2016-01-03 22:11:00   HERNANDEZ-JONES, FREDRICK JOSHUA 
2016-01-04 12:32:00   AGUERO, RAUL 

表号2:

Date      ID     Name 
2016-01-02 10:18:00  16-22-AR   CARDOSO, RAMON 
2016-01-02 15:02:00  16-24-AR   HARRISON, KATHYANNE M", " PALEO, SHERI" 
2016-01-02 15:02:00  16-25-AR   HARRISON, KATHYANNE M", " PALEO, SHERI" 
2016-01-03 02:09:00  16-31-AR   PHANOR, RENALDY 
2016-01-03 09:42:00  16-32-AR   GUAMAN, ANGEL 
2016-01-03 18:47:00  16-39-AR   AIME, MADELINE", " CADET, GARDY" 
2016-01-03 18:47:00  16-40-AR   AIME, MADELINE", " CADET, GARDY" 
2016-01-03 19:31:00  16-42-AR   REID, ARTHUR D 
2016-01-03 22:11:00  16-44-AR   HERNANDEZ-JONES, FREDRICK JOSHUA 
2016-01-04 12:32:00  16-49-AR   AGUERO, RAUL 

我的目标是在表1中ID为自己的列,但为了做到这一点,我需要做一个加入日期和莫名其妙地做名称匹配,我们从表1表2

UPDATE查找名称:

原始数据集看起来像这样

2016-01-02 10:18:00 16-22-AR    CARDOSO, RAMON 
2016-01-02 15:02:00 16-24-AR, 16-25-AR  HARRISON, KATHYANNE M", " PALEO, SHERI" 
2016-01-03 02:09:00 16-31-AR    PHANOR, RENALDY 
2016-01-03 09:42:00 16-32-AR    GUAMAN, ANGEL 
2016-01-03 18:47:00 16-39-AR, 16-40-AR  AIME, MADELINE", " CADET, GARDY" 
2016-01-03 19:31:00 16-42-AR    REID, ARTHUR D 
2016-01-03 22:11:00 16-44-AR    HERNANDEZ-JONES, FREDRICK JOSHUA 
2016-01-04 12:32:00 16-49-AR    AGUERO, RAUL 

的目标是有其自己的行与其相应的ID每个名字。这些ID与名称的顺序相同,第一个ID与第一个名称一致。

希望这个澄清有所帮助。

+1

使用码块格式化'{}'为表。不要使用片段。 – MYGz

+0

您可以[将名称列](http://stackoverflow.com/q/7069076/5977215)拆分为多个列,然后[将表格融化为长格式](http://stackoverflow.com/q/2185252/5977215)并加入'Date'和'Name' – SymbolixAU

+0

@ joel.wilson,我不确定你的意思是混淆? – Jomisilfe

回答

2

我认为当你有像

2016-01-02 15:02:00  16-24-AR   HARRISON, KATHYANNE M", " PALEO, SHERI" 
2016-01-02 15:02:00  16-25-AR   HARRISON, KATHYANNE M", " PALEO, SHERI" 

第一个ID对应的名字,第二个ID对应于第二名称。然后一种方法是创建一个具有正确名称的新列。

d$order <- unlist(sapply(rle(paste0(d$Date, d$Name))$lengths, seq_len)) 

split_names <- function(name, order = 1) { 
    names <- strsplit(name, '\\", \\"')[[1]] # Split 
    names <- gsub('^\\s|\\"', "", names) # Clean up leading space and trailing " 
    names[order] 
} 

d$Newname <- mapply(split_names, d$Name, d$order) 
d[, c("Date", "ID", "Newname")] 
#     Date  ID       Newname 
# 1 2016-01-02 10:18:00 16-22-AR     CARDOSO, RAMON 
# 2 2016-01-02 15:02:00 16-24-AR   HARRISON, KATHYANNE M 
# 3 2016-01-02 15:02:00 16-25-AR      PALEO, SHERI 
# 4 2016-01-03 02:09:00 16-31-AR     PHANOR, RENALDY 
# 5 2016-01-03 09:42:00 16-32-AR     GUAMAN, ANGEL 
# 6 2016-01-03 18:47:00 16-39-AR     AIME, MADELINE 
# 7 2016-01-03 18:47:00 16-40-AR      CADET, GARDY 
# 8 2016-01-03 19:31:00 16-42-AR     REID, ARTHUR D 
# 9 2016-01-03 22:11:00 16-44-AR HERNANDEZ-JONES, FREDRICK JOSHUA 
# 10 2016-01-04 12:32:00 16-49-AR      AGUERO, RAUL 

数据:

structure(list(Date = c("2016-01-02 10:18:00", "2016-01-02 15:02:00", 
"2016-01-02 15:02:00", "2016-01-03 02:09:00", "2016-01-03 09:42:00", 
"2016-01-03 18:47:00", "2016-01-03 18:47:00", "2016-01-03 19:31:00", 
"2016-01-03 22:11:00", "2016-01-04 12:32:00"), ID = c("16-22-AR", 
"16-24-AR", "16-25-AR", "16-31-AR", "16-32-AR", "16-39-AR", "16-40-AR", 
"16-42-AR", "16-44-AR", "16-49-AR"), Name = c("CARDOSO, RAMON", 
"HARRISON, KATHYANNE M\", \" PALEO, SHERI\"", "HARRISON, KATHYANNE M\", \" PALEO, SHERI\"", 
"PHANOR, RENALDY", "GUAMAN, ANGEL", "AIME, MADELINE\", \" CADET, GARDY\"", 
"AIME, MADELINE\", \" CADET, GARDY\"", "REID, ARTHUR D", "HERNANDEZ-JONES, FREDRICK JOSHUA", 
"AGUERO, RAUL")), .Names = c("Date", "ID", "Name"), row.names = c(NA, 
-10L), class = "data.frame") 
+0

我在理解排序的工作原理和实现这个解决方案的过程中遇到了一些困难。 – Jomisilfe

相关问题