связать два фрейма данных с разными именами строк и номерами строк - PullRequest
1 голос
/ 20 июля 2011

Предположим, у меня есть два фрейма данных, каждый из которых имеет разное количество строк и столбцов и разделяет некоторые имена строк, но не другие.Я хотел бы иметь возможность связать их вместе, чтобы результирующий фрейм данных имел все уникальные имена строк из составляющих фреймов данных, и просто помещал 'NA', где комбинация строк и столбцов не существовала в составляющих данных,Я думал, что должна быть какая-то операция объединения или слияния, которая может сделать это, но мне не удалось найти такую.Заранее спасибо!

Редактировать: Вот то, что я написал, и, кажется, работает, но я не уверен, насколько оно надежно:

new.cbind <- function(...)
{
  input <- eval(substitute(list(...), env = parent.frame()))

  names.orig <- NULL
  nrows <- numeric()
  for (i in 1:length(input))
    {
      nrows[i] <- nrow(input[[i]])
      names.orig <- c(names.orig, colnames(input[[i]])) 
    }

  idx <- (1:length(input))[order(nrows, decreasing=T)]
  x <- NULL
  for (i in 1:length(input))
    {
      x <- c(x, rownames(input[[idx[i]]]))
    }

  r <- data.frame(row.names=unique(x))
  for (i in 1:length(input))
    {
      r <- cbind(r, data.frame(input[[i]][match(rownames(r), rownames(input[[i]])),]))
    }

  colnames(r) <- names.orig

  return(r)
}

1 Ответ

2 голосов
/ 23 июля 2011

Ваш вопрос недостаточно конкретен в отношении того, что вы хотите получить в результате (что вы хотите, если имена строк совпадают?).Я думаю, что вы не можете присоединиться, используя имя строки - просто попробуйте поместить имя строки в качестве столбца, а затем используйте функцию merge () с параметром 'by', установленным для этого столбца.В вашем случае, возможно, как полное внешнее соединение (?), То есть со всеми = ИСТИНА?

...