简体   繁体   English

合并关于列的 2 个数据框

[英]Merge 2 data frame with respect to columns

I have 2 dataframes as shown.如图所示,我有 2 个数据框。 Can we merge with rep我们可以与代表合并吗

df1
a   b   c

X   a   2
X   b   4
X   c   1
Y   a   2
Y   b   1
df2
a1  c1

X   12
Y   10

Expected output (Because X and Y are top level values. Under X, we have a, b and c. Under Y, we have a and b. So we need to place them above these values.预期的 output (因为 X 和 Y 是顶级值。在 X 下,我们有 a、b 和 c。在 Y 下,我们有 a 和 b。所以我们需要将它们放在这些值之上。

Also, in another dataframe df2, we have values for both X and Y that need to populated into dataframe df1.此外,在另一个 dataframe df2 中,我们有需要填充到 dataframe df1 中的 X 和 Y 值。 Is this possible to acheive?这有可能实现吗?

a   b   c

    X   12
X   a   2
X   b   4
X   c   1
    Y   10
Y   a   2
Y   b   1

You could use dplyr :您可以使用dplyr

library(dplyr)

df2 %>%
  transmute(a = a1, b = a1, c = c1, prio = 1) %>%
  bind_rows(df1 %>% mutate(prio = 2)) %>%
  arrange(a, prio, b) %>%
  mutate(a = ifelse(prio == 1, NA_character_, a)) %>%
  select(-prio)

returns返回

# A tibble: 7 x 3
  a     b         c
  <chr> <chr> <dbl>
1 NA    X        12
2 X     a         2
3 X     b         4
4 X     c         1
5 NA    Y        10
6 Y     a         2
7 Y     b         1

If you prefer an empty string over NA , just replace NA_character_ with "" .如果您更喜欢空字符串而不是NA ,只需将NA_character_替换为""

Data数据

df1 <- structure(list(a = c("X", "X", "X", "Y", "Y"), b = c("a", "b", 
"c", "a", "b"), c = c(2, 4, 1, 2, 1)), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -5L), spec = structure(list(
    cols = list(a = structure(list(), class = c("collector_character", 
    "collector")), b = structure(list(), class = c("collector_character", 
    "collector")), c = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 2L), class = "col_spec"))

df2 <- structure(list(a1 = c("X", "Y"), c1 = c(12, 10)), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -2L), spec = structure(list(
    cols = list(a1 = structure(list(), class = c("collector_character", 
    "collector")), c1 = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1L), class = "col_spec"))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM