cbind具有不同rownames和行数的两个数据帧

时间:2011-07-19 21:36:17

标签: r join merge bind dataframe

假设我有两个数据框,每个数据框具有不同数量的行和列,并且共享一些行名但不共享其他行。我希望能够将它们组合在一起,以便结果数据框具有来自组成数据帧的所有唯一的rownames,并简单地将“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 个答案:

答案 0 :(得分:2)

你的问题对于你想要的结果是不够具体的(在rownames相同的情况下你想要什么?)。我认为你不能使用rowname加入 - 只是尝试将rowname作为一个列,然后使用merge()函数将参数'by'设置为该列。在你的情况下,可能是全外连接(?),即all = TRUE?

相关问题