как объединить несколько фреймов данных, добавить новые значения и присвоить 0 пропущенным значениям - PullRequest
0 голосов
/ 05 ноября 2018

У меня проблема с объединением нескольких фреймов данных в R, например:

table1:
NAME A1
a 1
b 2
c 3

table2:
NAME A2
a 10
b 20
d 30

table3:
NAME A3
a 100
b 200
e 400

Я хотел бы объединить эти таблицы с помощью «ИМЯ», добавив новые значения и присвоив «0» отсутствующему значению, например:

merged table:
NAME A1 A2 A3
a 1 10 100
b 2 20 200
c 3 0 0
d 0 30 0
e 0 0 400

Любое предложение поможет !! Большое спасибо !!!

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Если вы хотите попробовать без пакета и обычной вложенной функции слияния, это может быть конус как:

Data :
    table1<-data.frame(NAME=c("a","b","c"), A1=c(1,2,3))
    table2<-data.frame(NAME=c("a","b","d"),A2=c(10,20,30))
    table3<-data.frame(NAME=c("a","b","e"),A3=c(100,200,400))


Code:
final_data<-merge( merge( table1, table2, by = "NAME", all = TRUE ), table3, 
       by = "NAME", all = TRUE )

ВЫВОД:

 NAME A1 A2  A3
1    a  1 10 100
2    b  2 20 200
3    c  3 NA  NA
4    d NA 30  NA
5    e NA NA 400

не заменять na на 0 с использованием простого синтаксиса

final_data[is.na(final_data)]<-"0"

ВЫВОД:

  NAME A1 A2  A3
1    a  1 10 100
2    b  2 20 200
3    c  3  0   0
4    d  0 30   0
5    e  0  0 400

@ Ashok KS упомянул некоторый код, и его также можно записать как

data<- reshape::merge_recurse(list(table1, table2,table3))

data[is.na(data)]<-0
0 голосов
/ 05 ноября 2018

Использование API Tidyverse

library(tidyverse)

df1 <- tribble(
    ~Name, ~A1,
    "a", 1,
    "b", 2,
    "c", 3
)

df2 <- tribble(
    ~Name, ~A2,
    "a", 10,
    "b", 20,
    "d", 30
)

df3 <- tribble(
    ~Name, ~A3,
    "a", 100,
    "b", 200,
    "e", 400
)


list(df1, df2, df3) %>% 
    reduce(full_join, by = "Name") %>% 
    replace(is.na(.), 0)
0 голосов
/ 05 ноября 2018

Вы можете использовать изменить форму

library(reshape)
data <- merge_recurse(list(table1, table2, table3))

Пропущенными значениями будут NA. Замена NA с 0

data[is.na(data)] <- 0

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...