【问题标题】:After a tidyr join, ordering columns based on original data framestidyr 连接后,根据原始数据框对列进行排序
【发布时间】:2018-01-24 18:24:44
【问题描述】:

在对两个数据框进行 tidyr 连接后,如何根据返回的原始数据框对返回的列进行排序?我在下面提出了几个解决方案。第一个感觉很笨拙。第二个可能不是好的做法。我想我错过了一些东西。

library(tidyverse)

a <- data_frame(x1 = LETTERS[1:3], x2 = 1:3)
b <- data_frame(x1 = LETTERS[c(1,2,4)], x3 = c(TRUE, FALSE, TRUE))

# Not the order I want
left_join(a, b, by = "x1")

# This is the order I want
a %>%
  left_join(b, by = "x1") %>%
  select(names(b), names(a)[!(names(a) %in% names(b))])

# This works too.
right_join(b, a, by = "x1") 

【问题讨论】:

    标签: r dplyr tidyr


    【解决方案1】:

    我想你可以做到unique(c(names(b), names(a))):

    a %>%
        left_join(b, by = "x1") %>%
        select(unique(c(names(b), names(a))))
    
    # A tibble: 3 x 3
    #     x1    x3    x2
    #  <chr> <lgl> <int>
    #1     A  TRUE     1
    #2     B FALSE     2
    #3     C    NA     3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多