Объединить один и тот же столбец из разных фреймов данных - PullRequest
0 голосов
/ 15 января 2019

Я новичок в 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 голосов
/ 15 января 2019

Использование 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)
0 голосов
/ 15 января 2019

Один параметр в base R равен pmin/pmax (при условии, что в одном месте находится только один элемент, отличный от NA). Поместите объекты в listmget) и используйте 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"))
...