Конкатенация списка фреймов данных с нулевыми значениями с использованием rbind

У меня есть список данных, которые я хотел объединить

 data List of 3  ###list of 3 dataframes

 AT1: 'data.frame': 1 obs of 2 varibles
 $neighbor: chr "ATa"
 $node: chr "AT1"

 AT2: 'data.frame': 0 obs of 2 varibles
 $neighbor: chr(0)
 $node: chr(0)

 AT3: 'data.frame': 4 obs of 2 varibles
 $neighbor: chr[1:4] "ATe" "ATf" "ATg" "ATh"
 $node: chr[1:4] "AT3" "AT3" "AT3" "AT3"

Когда я пытаюсь объединить кадры данных с помощью

  concatdata<-do.call("rbind",data)

Я получаю следующее

dataframe

node  neighbor

AT1       ATa
AT3       ATe
AT3       ATf
AT3       ATg
AT3       ATh

Я хотел бы, чтобы нулевой элемент данных включался следующим образом. Это для дальнейших расчетов. Как я могу это сделать?

сосед узла

AT1       ATa
AT2       0 or as NA
AT3       ATe
AT3       ATf
AT3       ATg
AT3       ATh   

1 ответ

Решение

Мы можем создать if/else условие для создания наборов данных, которые имеют 0 строк в NA

do.call(rbind, lapply(data, function(x) 
    if(nrow(x)==0) data.frame(neighbour = NA, node = "AT2") else x))[2:1]

Или другой вариант - присоединиться

library(data.table)
rbindlist(data)[data.frame(node = names(data)), on = "node"]

данные

data <- structure(list(AT1 = structure(list(neighbour = "ATa", 
 node = "AT1"), .Names = c("neighbour", 
 "node"), row.names = c(NA, -1L), class = "data.frame"), AT2 = structure(list(
neigbour = character(0), node = character(0)), .Names = c("neigbour", 
 "node"), row.names = integer(0), class = "data.frame"), AT3 = structure(list(
neighbour = c("ATe", "ATf", "ATg", "ATh"), node = c("AT3", 
"AT3", "AT3", "AT3")), .Names = c("neighbour", "node"), row.names = c(NA, 
-4L), class = "data.frame")), .Names = c("AT1", "AT2", "AT3"))
Другие вопросы по тегам