我是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中做到这一点?
谢谢。
答案 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
)中,并将pmin
和do.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"))