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