使用R中的列中的多个值进行合并?

时间:2018-02-26 23:01:51

标签: r

我有一个2个dfs,一个列有多个值,例如

  A            B
 10     400, 500, 600
 20     700, 800, 900

 C         D
10        500
20        900

我是否可以使用合并功能合并两个表,使用D中的值匹配B ??中的任何值

非常感谢。

1 个答案:

答案 0 :(得分:1)

我不完全确定你想做什么;也许您可以编辑您的问题以包括您的预期结果。这是你之后的事吗?

require(tidyverse);
df1 %>%
    separate(B, into = paste0("_", 1:3), sep = ", ") %>%
    gather(key, val, 2:4) %>%
    rename(B = val) %>%
    select(A, B) %>%
    mutate(B = as.numeric(B)) %>%
    full_join(df2, by = c("B" = "D"));
#   A   B  C
#1 10 400 NA
#2 20 700 NA
#3 10 500 10
#4 20 800 NA
#5 10 600 NA
#6 20 900 20

说明:将df1$B中的条目拆分为不同的列,将数据从宽格式转换为长格式,然后通过将条目df1$B与条目df2$D匹配来执行完全外部联接。

或使用内部联接

require(tidyverse);
df1 %>%
    separate(B, into = paste0("_", 1:3), sep = ", ") %>%
    gather(key, val, 2:4) %>%
    rename(B = val) %>%
    select(A, B) %>%
    mutate(B = as.numeric(B)) %>%
    inner_join(df2, by = c("B" = "D"));
#   A   B  C
#1 10 500 10
#2 20 900 20

样本数据

df1 <- read.table(text =
    "A            B
 10     '400, 500, 600'
 20     '700, 800, 900'", header = T);

 df2 <- read.table(text =
    "C         D
10        500
20        900", header = T)