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

R cbind具有不同行名和行数的两个数据帧,r,join,merge,bind,dataframe,R,Join,Merge,Bind,Dataframe,假设我有两个数据帧,每个数据帧具有不同数量的行和列,并且共享一些行名称,但不共享其他行名称。我希望能够将它们绑定在一起,以便生成的数据帧具有来自组成数据帧的所有唯一行名,并简单地在组成数据中不存在行和列组合的位置放置一个“NA”。我认为一定有某种连接或合并操作可以做到这一点,但我还没有成功地找到一个。提前谢谢 编辑:以下是我所写的,它似乎有效,但我不确定它有多强大: new.cbind <- function(...) { input <- eval(substitute(lis

假设我有两个数据帧,每个数据帧具有不同数量的行和列,并且共享一些行名称,但不共享其他行名称。我希望能够将它们绑定在一起,以便生成的数据帧具有来自组成数据帧的所有唯一行名,并简单地在组成数据中不存在行和列组合的位置放置一个“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)
}

new.cbind您的问题对于您想要的结果不够具体(如果行名相等,您想要什么?)。我认为不能使用rowname进行连接-只需尝试将rowname作为列,然后使用merge()函数,并将参数“by”设置为该列。在您的情况下,可能是完全外部连接(?)即all=TRUE?

如果行名相等,那么我只希望它将两个帧绑定在一起。我最后写了一些可以做到这一点的东西,但它很笨重,我不确定它到底有多强大。直觉上,它帮助meDon不以行名存储数据。使用合并。