合并来自不同数据帧的同一列

时间:2019-01-15 13:20:48

标签: r dataframe merge match

我是R的新手,并且想做一些基本的事情。 我有三个具有相同名称的列的数据框。在每个数据帧中注册一个不同的值。 (在我的真实数据中,有更多的值,当然不适用)

Df1

   Value
 A  1
 B  NA
 C  NA
 D  NA

Df2

   Value
 A  NA
 B  NA
 C  2
 D  NA

Df3

   Value
 A  NA
 B  NA
 C  NA
 D  3

我想合并三个数据框,以便可以完成此列。所以我明白了:

Df

   Value
 A  1
 B  NA
 C  2
 D  3

如何在R中做到这一点?

谢谢。

2 个答案:

答案 0 :(得分:3)

使用dplyr::coalesce

library(dplyr)
Df <- data.frame(Value = coalesce(Df1$Value, Df2$Value,Df3$Value),
                 row.names = row.names(Df1))
Df
#   Value
# A     1
# B    NA
# C     2
# D     3

数据

Df1 <- read.table(text="
Value
A  1
B  NA
C  NA
D  NA",strin=F,h=T)

Df2  <- read.table(text="
Value
A  NA
B  NA
C  2
D  NA",strin=F,h=T)

Df3  <- read.table(text="
Value
A  NA
B  NA
C  NA
D  3",strin=F,h=T)

答案 1 :(得分:2)

base R中的一个选项是pmin/pmax(假设在同一位置只有一个非NA元素)。将对象放入list(带有mget)中,并将pmindo.call

一起使用
do.call(pmin, c(mget(paste0("Df", 1:3)), na.rm = TRUE))
#  Value
#A     1
#B    NA
#C     2
#D     3

数据

Df1 <- structure(list(Value = c(1L, NA, NA, NA)), class = "data.frame", row.names = c("A", 
"B", "C", "D"))

Df2 <- structure(list(Value = c(NA, NA, 2L, NA)), class = "data.frame", row.names = c("A", 
"B", "C", "D"))

Df3 <- structure(list(Value = c(1L, NA, 2L, 3L)), class = "data.frame", row.names = c("A", 
"B", "C", "D"))