假设我有两个数据框,每个数据框具有不同数量的行和列,并且共享一些行名但不共享其他行。我希望能够将它们组合在一起,以便结果数据框具有来自组成数据帧的所有唯一的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)
}
答案 0 :(得分:2)
你的问题对于你想要的结果是不够具体的(在rownames相同的情况下你想要什么?)。我认为你不能使用rowname加入 - 只是尝试将rowname作为一个列,然后使用merge()函数将参数'by'设置为该列。在你的情况下,可能是全外连接(?),即all = TRUE?