代码之家  ›  专栏  ›  技术社区  ›  itthrill

左联接并仅从右表中选择匹配列

  •  0
  • itthrill  · 技术社区  · 6 年前

    我有两个数据帧,每个数据帧包含N列(1个ID和N-1个数值列)。我正在使用ID列联接(左联接)两个数据帧。因为n-1列在两个数据帧中,所以我在两个数据帧中都有(n-1).x和(n-1).y列。

    如何删除所有(n-1).x和保留(n-1).y列(仅在dpylr中)?

    dataA<-data.frame(ID=c("1","b","c"),Val=c(1,2,3))
    dataB<-data.frame(ID=c("1","b","c"),Val=c(4,5,6))
    data<-dataA %>% left_join(dataB,by=c("ID"="ID"))
    data
    #  ID Val.x Val.y
    #1  1     1     4
    #2  b     2     5
    #3  c     3     6
    

    请假设 Val Val1 , Val2 等等直到 瓦尔 N-1。

    1 回复  |  直到 6 年前
        1
  •  2
  •   DevMui    6 年前

    您只需连接和删除以“.x”结尾的列即可。

    dataA %>%
    left_join(dataB, by=c('ID'='ID')) %>%
    select(-ends_with(".x"))
    
      ID Val.y
    1  1     4
    2  b     5
    3  c     6
    

    或者只能从左侧数据框中选择“id”列并将其联接。

    dataA%>%
    select(ID) %>%
    left_join(dataB, by=c('ID'='ID'))
    
       ID Val
    1  1   4
    2  b   5
    3  c   6