【问题标题】:Joining data in R by first row, then second and so on按第一行连接 R 中的数据,然后是第二行,依此类推
【发布时间】:2018-09-17 12:39:31
【问题描述】:

我有两个带有一个公共变量的数据集 - ID(两个数据集中有重复的 ID 号)。我需要将日期链接到一个数据集,但我不能使用左连接,因为可以说第一个或左文件需要保持原样(我不希望它返回所有组合并添加行)。但我也不希望它链接 Excel 中的 vlookup 之类的数据,它会找到第一个匹配项并返回它,所以当我有重复的 ID 号时,它只返回第一个匹配项。我需要它返回第一个匹配项,然后是第二个匹配项,然后是第三个匹配项(因为对日期进行了排序,因此每个 ID 号的最新日期始终排在第一位)等等,但我无法添加行。有没有办法做到这一点?由于我不知道如何向您展示我已经包含了我需要的示例图片。 data joining。不知道我是否说清楚了,但提前谢谢你!

【问题讨论】:

  • 请分享数据并提供可重现的示例!
  • 两个数据集的行数是否完全相同?
  • 执行左连接以创建额外的行,然后 spread 将这些额外的行放入多个变量中,这样您最终会得到与开始时相同的行数。

标签: r join dplyr left-join vlookup


【解决方案1】:

您可以添加第二列来创建遵循行号顺序的子 ID。然后您可以使用 inner_join 将所有内容连接在一起。

由于您没有示例数据集,因此我创建了两个来展示原理。

df1 <- df1 %>% 
  group_by(ID) %>% 
  mutate(follow_id = row_number())


df2 <- df2 %>% group_by(ID) %>% 
  mutate(follow_id = row_number())

outcome <- df1 %>% inner_join(df2)

# A tibble: 7 x 3
# Groups:   ID [?]
     ID sub_id var1 
  <dbl>  <int> <fct>
1     1      1 a    
2     1      2 b    
3     2      1 e    
4     3      1 f    
5     4      1 h    
6     4      2 i    
7     4      3 j    

数据:

df1 <- data.frame(ID = c(1, 1, 2,3,4,4,4))
df2 <- data.frame(ID = c(1,1,1,1,2,3,3,4,4,4,4),
                  var1 = letters[1:11])

【讨论】:

    【解决方案2】:

    您需要一个辅助 id 列。由于您需要前 n 个匹配项,只需按 id 分组,为每个组创建一个自动增量 id,然后像往常一样加入

    df1<-data.frame(id=c(1,1,2,3,4,4,4))
    d1=sample(seq(as.Date('1999/01/01'), as.Date('2012/01/01'), by="day"),11)
    df2<-data.frame(id=c(1,1,1,1,2,3,3,4,4,4,4),d1,d2=d1+sample.int(50,11))
    library(dplyr)
    df11 <- df1 %>%
      group_by(id) %>%
      mutate(id2=1:n())%>%
      ungroup()
    df21 <- df2 %>%
      group_by(id) %>%
      mutate(id2=1:n())%>%
      ungroup()
    
    left_join(df11,df21,by = c("id", "id2"))
    
    # A tibble: 7 x 4
         id   id2 d1         d2        
      <dbl> <int> <date>     <date>    
    1     1     1 2009-06-10 2009-06-13
    2     1     2 2004-05-28 2004-07-11
    3     2     1 2001-08-13 2001-09-06
    4     3     1 2005-12-30 2006-01-19
    5     4     1 2000-08-06 2000-08-17
    6     4     2 2010-09-02 2010-09-10
    7     4     3 2007-07-27 2007-09-05
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      相关资源
      最近更新 更多