我有一个2个dfs,一个列有多个值,例如
A B
10 400, 500, 600
20 700, 800, 900
C D
10 500
20 900
我是否可以使用合并功能合并两个表,使用D中的值匹配B ??中的任何值
非常感谢。
答案 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)