在这里,我提供了三个使用tidyverse
. x2
, x4
, 和x5
是最终输出。
y
我们可以从和创建组合数据帧z
,然后与 执行连接x
。
# Load packages
library(tidyverse)
# Create example data frames
x <- tibble(num=c(1,2,3,2,5,5,8), alph=NA)
y <- tibble(num=1:4, alph=LETTERS[1:4])
z <- tibble(num=5:10, alph=LETTERS[5:10])
# Create combined table from y and z
yz <- bind_rows(y, z)
# Perform join
x2 <- x %>%
select(-alph) %>%
left_join(yz, by = "num")
x2
# # A tibble: 7 x 2
# num alph
# <dbl> <chr>
# 1 1 A
# 2 2 B
# 3 3 C
# 4 2 B
# 5 5 E
# 6 5 E
# 7 8 H
或者使用reduce
合并所有数据框,然后选择不NA
构建新数据框的那一个。
x3 <- reduce(list(x, y, z), left_join, by = "num")
x4 <- tibble(num = x3$num,
alph = apply(x3[, -1], 1, function(x) x[!is.na(x)]))
x4
# # A tibble: 7 x 2
# num alph
# <dbl> <chr>
# 1 1 A
# 2 2 B
# 3 3 C
# 4 2 B
# 5 5 E
# 6 5 E
# 7 8 H
或在reduce
and之后join
,gather
用于删除NA
值。
x3 <- reduce(list(x, y, z), left_join, by = "num")
x5 <- x3 %>%
gather(Type, alph, -num, na.rm = TRUE) %>%
select(-Type)
x5
# # A tibble: 7 x 2
# num alph
# <dbl> <chr>
# 1 1 A
# 2 2 B
# 3 3 C
# 4 2 B
# 5 5 E
# 6 5 E
# 7 8 H